Linux自学笔记——MariaDB基础

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

MySQL相关介绍:
mariadb(mysql)
数据模型:层次模型、网状模型、关系模型
关系模型:
二维关系:
表:row,column
索引:index
视图:view
SQL接口:Structured Query Language
类似于OS的shell接口;也提供编程功能;
ANSI:SQL标准,SQL-86,SQL-89,SQL-92,SQL-99,SQL-03,…
DDL:Data Defined Language
CREATE ALTER DROP
DML:Data Manapulating Language
INSERT,DELETE,UPDATE,SELECT
编程接口:选择、循环;
SQL代码:
存储过程:procedure
存储函数:function
触发器:trigger
时间调度器:event scheduler
用户和权限:
用户:用户名和密码;
权限:管理类、数据库、表、字段
DBMS:DataBase Management System
RDBMS:Relational
MySQL:单进程,多线程 
用户连接:通过线程来实现;
线程池:
事务(Transaction):组织多个操作为一个整体,要么全部都执行,要么全部都不执行;
“回滚”, rollback
一个存储系统是否支持事务,测试标准:
ACID:
A:原子性;
C:一致性;
I:隔离性;
D:持久性;
SQL接口:分析器和优化器
存储引擎:
MySQL的命令行客户端程序:mysql
-u:USERNAME
-h:HOST
-p:PASSWORD

    支持SQL语句对数据管理:
        DDL,DML
            DDL:CREATE,ALTER,DROP,SHOW
            DML:INSERT,DELETE,SELECT,UPDATE
    授权能远程的连接用户:

  mysql> GRANT ALL PROVILEGES ON db_name.tb1_name TO username@host IDENTIFIED BY ‘password’
数据库的基本操作;
GREATE DATABASE db_name:创建数据库
DROP DATABASE db_name:删除数据库
补充材料:RDMBS设计范式基础概念
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
(1) 第一范式(1NF)
所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。
(2) 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
(3) 第三范式(3NF)
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不能包含已在其它关系已包含的非主关键字信息。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。

数据库:数据集合;
表:为了满足范式设计要求,讲一个数据集拆分为多个;
约束:constraint,向数据表插入的数据要遵守的限制规则;
主键:一个或多个字段的组合,填入主键中的数据,必须不同于已存在的数据;不能为空;
外键:一个表中字段中能插入的数据,取决于另外一张表的主键中的数据;
唯一键:一个或多个字段的组合,填入唯一键中的数据,必须不同于已存在的数据;可以为空;检查性约束;取决于表达式的请求;
索引:将表中的某一个或某些字段抽取出来,单独将组织一个独特的数据结构中;
常用的索引类型:
树型:
hash:
注意:有助于读请求,但不利于写请求;
关系运算:
选择:挑选出符合条件的行;
投影:挑选出符合条件的列;
连接:将多张表关联起来;
数据抽象:
物理层:决定数据的存储格式,即如何将数据组织为物理文件;
逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系;
视图层:描述DB中的部分数据;
关系模型的分类:
关系模型
实体-关系模型
基于对象关系模型
半结构化关系模型;
网站:www.mariadb.org
Mariadb的特性:
插件式存储引擎:存储管理器有多种实现版本,彼此间的功能和特性可能略有区别;用户可根据需要灵活选择;
存储引擎也称为“表类型”;
1) 更多的存储引擎;
MyISAM:不支持事务;
MyISAM --> Aria
InnoDB --> XtraDB:支持事务
2) 诸多扩展和新特性;
3) 提供了较多的测试组件;
4) Truly open sorce;
MySQL的发行机制:
Enterprise:提供了更丰富的功能;
Community:
安装和使用MariaDB:
安装方式:
1) rpm包:
a. 由OS的发行商提供;
b. 程序官方提供;
2) 源码包:
3) 通用二进制格式的程序包;
示例:通过二进制格式安装MariaDB:

  1. 准备数据目录:
    以/mydata/data目录为例;
  2. 安装配置mariadb;
    #groupadd –r –g 306 mysql
    #useradd –r –g 306 –u 306 mysql
    #tar xf mariadb-VERSION.tar.xz -C /usr/local
    #cd /usr/local
    #ln –sv mariadb-VERSION mysql
    #cd /usr/local/mysql
    #chowm –R root:mysql ./*
    #scripts/mysql_install_db --user=mysql –datadir=/mydata/data
    #cp support-files/mysql.server /etc/init.d/mysqld
    #chkconfig --add mysqld
  3. 提供配置文件;
    Ini格式的配置文件:各程序均可通过此配置文件获取配置信息:
    [program_name]
    OS Vendor提供mariadb rpm包安装的服务的配置文件查找次序:
    /etc/mysql/my.cnf  /etc/my.cnf  --default-extra-file=/PATH/TO/CONF_FILE  ~/.my.cnf
    通过二进制格式安装的服务器程序其配置文件查找次序;
    /etc/my.cnf  /etc/mysql/my.cnf  --default-extra-file=/PATH/TO/CONF_FILE ~/.my.cnf
    获取其读取次序的方法
    mysqld --verbose --help

#cp support-files/my-large.cnf /etc/my.cnf

添加三个选项:
datadir = /mydata/data
inodb_file_per_table= ON
skip_name_resolve = ON
4. 启动服务
#service mysqld start
示例,演示:

  1. 下载解压程序文件至/usr/local目录,并创建软连接;
    Linux自学笔记——MariaDB基础
  2. 创建用户组和相关目录;
    Linux自学笔记——MariaDB基础
  3. 权限修改;
    Linux自学笔记——MariaDB基础
  4. 生成元数据库;
    获取帮助:
    Linux自学笔记——MariaDB基础
    指明用户位置和数据库目录创建元数据库:
    Linux自学笔记——MariaDB基础
  5. 复制运行脚本,并将其加入服务列表中;
    Linux自学笔记——MariaDB基础
  6. 复制配置文件并编辑添加一下三行;
    复制文件;
    Linux自学笔记——MariaDB基础
    编辑配置文件;
    Linux自学笔记——MariaDB基础
  7. 启动服务;
    Linux自学笔记——MariaDB基础
  8. 进入mysql;
    Linux自学笔记——MariaDB基础

MariaDB的基础(2)
MariaDB程序的组成:
C:Client
mysql:CLI交互式客户端程序;
mysqldump:备份工具;
mysqladmin:管理工具:
mysqlbinlog:

S:Server
mysqld
mysqld_safe:建议运行服务端程序;
mysqld_multi:多实例;

    三类套接字地址:
       IPv4, 3306/tcp
       Unix Socket:/var/lib/mysql/mysql.sock,/tmp/mysql.sock
    &emsp;      C < - - >S:localhost, 127.0.0.1

命令行交互式客户端程序:mysql
mysql
mysql [OPTIONS] [database]
常用选项:
-uUSERNAME:用户名,默认为root;
-hHOST:远程主机(mysql服务器)地址,默认为localhost
-p[PASSWORD]:USERNAME所表示的用户的密码; 默认为空;

 注意:mysql的用户账号由两部分组成:'USERNAME'@'HOST'; 其中HOST用于限制此用户可通过哪些远程主机连接当前的mysql服务;
HOST的表示方式,支持使用通配符:
%:匹配任意长度的任意字符;
192.168.19.%, 172.16.19.0/16
_:匹配任意单个字符;
-Ddb_name:连接到服务器端之后,设定其处指明的数据库为默认数据库;
-e ‘SQL COMMAND;’:连接至服务器并让其执行此命令后直接返回;
命令:
客户端命令:本地执行
mysql> help
 Linux自学笔记——MariaDB基础
\u db_name:设定那个库为默认数据库;
\q:退出;
\d CHAR:设定新的语句结束符;
\g:语句结束标记;
\G:语句结束标记,结果竖排方式显示;
\s:显示服务器端状态信息;
服务端命令:通过mysql连接发往服务器执行并取回结果;
DDL,DML,DCL
Note:每个语句必须有语句结束符,默认为分号(;)
数据类型:
表:行和列
创建表:定义表中的字段;
定义表中的字段时,关键的一步即为确定其数据类型;
用于确定:数据存储格式、能参与运算种类、可表示的有效的数据范围;
字符型:字符集;
码表:在字符和二进制数字之间建立映射关系;
种类:
字符型:
定长字符型:
CHAR(#):不区分字符大小写
BINARY(#):区分字符大小写;
变长字符型:
VARCHAR(#)
VARBINARY(#)
对象存储:
TEXT
BLOB
内置类型:
SET
ENUM
数值型:
精确数值型:
INT(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT)
近似数值型:
FLOAT:浮点型,单精度;
DOBULE:双精度;
日期时间型:
日期型:DATE
时间型:TIME
日期时间型:DATETIME
时间戳:TIMESTAMP
年份:YEAR(2),YEAR(4)
数据类型修饰符:
UNSIGNED:无符号;
NOT NULL:非空;
DEFAULT value:默认值;
服务端命令:
DDL:数据定义语言,主要用于管理数据库组件,例如表、索引、视图、用户、存储过程
CREATE ALTER DROP
DML:数据操纵语言,主要用管理表中的数据,实现数据的增、删、改、查;
INSERT,DELETE,UPDATE,SELECT
获取命令帮助:
mysql > help KEYBOARD
数据库管理:
创建:
CREATE { DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
Linux自学笔记——MariaDB基础
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
查看支持的所有的字符集:SHOW CHARACTER SET;
Linux自学笔记——MariaDB基础
查看支持的所有排序规则:SHOW COLLATION;
Linux自学笔记——MariaDB基础
修改:
ALTER {DATABASE | SCHEMA } [db_name]
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
修改数据库的默认字符集:
Linux自学笔记——MariaDB基础
修改数据库默认字符排序规则:
Linux自学笔记——MariaDB基础
删除:
DROP {DATABASE | SCHEMA} [IF EXITS] db_name
Linux自学笔记——MariaDB基础 
查看:
SHOW DATABASES LIKE ‘’;
Linux自学笔记——MariaDB基础
NOTE:‘’里为pattern,可用%或者_表示;
表管理:
创建:
CREATE TABLE [IF NOT EXISTS] tb1_name(create_defination)[table_options]
create_defination:
字段:col_name data_type
键:
PRIMARY KEY (col1,col2,…)
UNIQUE KEY(col1,col2,…)
FOREIGN KEY(column)
索引:
KEY|INDEX [index_name] (col1,col2…)
table_options:
ENGINE [=] ENGINE_NAME
创建数据表:
Linux自学笔记——MariaDB基础
查看数据可支持的所有存储引擎类型:
mysql> SHOW ENGINES;
Linux自学笔记——MariaDB基础
查看表结构:
Linux自学笔记——MariaDB基础 
查看某标的存储引擎类型:
mysql> SHOW TABLES STATUS [LIKE ‘tb1_name’]
Linux自学笔记——MariaDB基础 
修改:
ALTER [ONLINE | OFFLINE ] [IGNORE] TABLE tb1_name [alter_specification [,alter_specification] …]
Alter_specification:
字段:
添加:ADD [COLUMN] col_name data_type [FIRST |AFTER col_name]
Linux自学笔记——MariaDB基础
删除:DROP [COLUMN] col_name
Linux自学笔记——MariaDB基础
修改:
CHANGE [COLUMN] old_col_name new_col_name column_definnition [FIRST|AFTER col_name]
Linux自学笔记——MariaDB基础
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
Linux自学笔记——MariaDB基础
键:
添加:ADD {PRIMARY|UNIQUE|FOREIGN} KEY (col1,col2,…)

                        删除:
                            主键:DROP PRIMARY KEY
                            外键:DROP FOREIGN KEY fk_symbol
                    索引:
                        添加:ADD {INDEX|KEY} [index_name]  (col1, col2,...)
                        删除:DROP {INDEX|KEY}  index_name
                    表选项:
                        ENGINE [=] engine_name
                    查看表上的索引的信息:
                        mysql> SHOW INDEXES FROM tbl_name;
                         ![](http://i2.51cto.com/images/blog/201711/24/a18a9861e2bace20b47d6bd4dc102c19.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
                删除:
                DROP  TABLE  [IF EXISTS]   tbl_name [, tbl_name] ...

                表的引用方式:
                    tbl_name
                    db_name.tbl_name

                第二种创建方式:
                    复制表结构;

                第三种创建方式:
                    复制表数据;
        索引管理:
            索引是特殊的数据结构;
            索引:要有索引名称;
            创建:

CREATE [UNIQUE|FULL TEXT|SPATIAL] INDEX index_name [BTREE|HASH] ON tb1_name (col1,col2,…)
Linux自学笔记——MariaDB基础
删除:
DROP INDEX index_name ON tb1_name
Linux自学笔记——MariaDB基础
DML: INSERT , DELETE, UPDATE , SELECT
INSERT INTO:
INSERT [INTO] tb1_name [(col1,…)] {VALUES|VALUE} (val1,…),(…),…
注意:
字符型:引号;
数值型:不能用引号;
Linux自学笔记——MariaDB基础 
SELECT:
1) SELECT * FROM tb1_name;
Linux自学笔记——MariaDB基础
2) SELECT col1,col2,… FROM tb1_name;
显示时,字段可以显示为别名:
col_name AS col_alias
Linux自学笔记——MariaDB基础
3) SELECT col1,…FROM tb1_name WHERE clause;
WHERE clause:用于指明挑选条件;
col_name 操作符 value:
age>30;
Linux自学笔记——MariaDB基础
操作符(1):

,<,>=,<=,==,!=
组合条件:
and
or
not
操作符(2):
BETWEEN … AND …
LIKE ‘PATTERN’
通配符:
%:任意长度的任意字符;
_:任意单个字符;
RLIKE ‘PATTERN’
正则表达式对字符串做模式匹配;
IS NULL
IS NOT NULL
Linux自学笔记——MariaDB基础
4) SELECT col1,…FROM tb1_name [WHERE clause] ORDER BY col_name,col_name2,… [ASC|DESC];
ASC:升序;
DESC:降序;
Linux自学笔记——MariaDB基础
DELETE:
DELETE FROM tb1_name [WHERE where_condition] [ORDER BY…] [LIMIT row_count]
1) DELETE FROM tbl_name WHERE where_condition
2) DELETE FROM tbl_name [ORDER BY ...] [LIMIT row_count]
Linux自学笔记——MariaDB基础
UPDATE
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1=value1 [,col_name2=value2]… [WHERE where_condition] [ORDER BY …] [LIMIT rowcount]
用户账号及权限管理:
用户账号:‘username’@ ‘host’
host:此用户访问当前的mysql服务器时,允许其通过哪些主机远程创建链接;
表示方式:IP,网络地址、主机名、通配符(%和

禁止检查主机名:my.cnf
[mysqld]
skip_name_resolve = ON
Linux自学笔记——MariaDB基础
创建用户账号:
CREATE USER ‘username’@’host’[IDENTIFIED BY ‘password’];
Linux自学笔记——MariaDB基础 
删除用户账号:
DROP USER ‘user’@‘host’ [,user@host]…
Linux自学笔记——MariaDB基础
查看用户:
Linux自学笔记——MariaDB基础
授权:
权限级别:管理权限、数据库、表、字段、存储历程;
GRANT priv_type ,… ON [object_type] db_name.tb1_name TO ‘user’@’’host’[IDENTIFIED BY ‘password’];
Priv_type: ALL [PRIVILEGES]
db_name.tb1_name:
.:所有库的所有表;
db_name.*指定库的所有表;
db_name.tbl_name:指定库的特定表;
db_name.routine_name:指定库上的存储过程或存储函数;
[object_type]
TABLE
FUNCTION
PROCEDURE
Linux自学笔记——MariaDB基础
查看指定用户所获得的授权:
SHOW GRANTS FOR ‘user’@’host’;
SHOW GRANTS FOR CURRENT_USER;
Linux自学笔记——MariaDB基础
回收权限:
REVOKE priv_type,… ON db_name.tb1_name FROM ‘user’@’host’;
Linux自学笔记——MariaDB基础
Note:Mariadb服务进程启动时,会读取mysql库的所有授权表至内存中;
1) GRANT 或REVOKE命令等执行的权限操作会保存在表中,Mariadb此时一般会自动重读授权表,权限修改会立即生效;
2) 其他方式实现的权限修改,要想生效,必须手动运行FLUSH PRICILEGES命令方可;、
加固mysql服务器,在安装完成后,运行mysql_secure_installion命令;
图形管理组件:
phpMyAdmin
运行于LAMP;
Navicat
Mysql-Front
ToadForMySQL
SQLyog




本文转自 claude_liu 51CTO博客,原文链接:http://blog.51cto.com/claude666/2043887,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
176 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
4月前
|
Linux
Linux源码阅读笔记10-进程NICE案例分析2
Linux源码阅读笔记10-进程NICE案例分析2
|
4月前
|
Linux
Linux源码阅读笔记09-进程NICE案例分析1
Linux源码阅读笔记09-进程NICE案例分析1
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
116 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
关系型数据库 MySQL Linux
Linux-安装Mariadb
本文介绍了在 Alibaba Cloud Linux 系统上安装和配置 MariaDB 10.5 的步骤。包括下载安装、初始化数据库、启动服务、处理启动失败的常见问题(如权限问题),以及如何连接数据库、设置密码和允许外部连接。通过这些步骤,您可以顺利完成 MariaDB 的安装和基本配置。
74 0
|
4月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
121 2
linux笔记 diff及patch的制作与使用
|
4月前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中
|
4月前
|
消息中间件 安全 Java
Linux源码阅读笔记13-进程通信组件上
Linux源码阅读笔记13-进程通信组件上
|
4月前
|
Linux 开发者
Linux源码阅读笔记18-插入模型及删除模块操作
Linux源码阅读笔记18-插入模型及删除模块操作
|
4月前
|
Linux
Linux源码阅读笔记12-RCU案例分析
Linux源码阅读笔记12-RCU案例分析