一、MariaDB简介
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,被视为开源数据库MySQL的替代品。MariaDB名称来自Michael Widenius的女儿Maria的名字。
MariaDB 是一个采用 Maria 存储引擎的MySQL分支版本,提供一些新的特性或对MySQL一些功能增强:Maria存储引擎、PBXT存储引擎、XtraDB存储引擎、FederatedX存储引擎、更快的复制查询处理、线程池、更少的警告和bug、运行速度更快、更多的 Extensions (More index parts, new startup optionsetc)、更好的功能测试、数据表消除、慢查询日志的扩展统计、支持对 Unicode 的排序
简要概述SQL核心组件作用
连接池:认证、线程重用、连接数限制、内存检查、缓存
SQL接口:DDL, DML, 关系型数据库的基本抽象
parser: 查询转换、对象权限检查
优化器:访问路径,性能相关的统计数据
caches和buffers:与存储引擎自身相关的I/O性能提升工具
存储引擎:MyISAM、InnoDB(变种:XtraDB)、Memory、Merge、Federated、CSV、Archive、Blackholl、Aria、SphinxSE、TokuDB
二、MariaDB安装(yum安装)
按照之前准备工作,这里测试安装的操作系统为CentOS Linux release 7.1.1503,默认启用了firewall防火墙和SELINUX防火墙,这里先做关闭。注意使用centos7和centos7以下的版本使用的命令有所不同。
关闭firewall:
[root@localhost ~]#systemctl stop firewalld.service #停止firewall
[root@localhost ~]#systemctl disable firewalld.service #禁止firewall开机启动
关闭SELINUX:
[root@localhost ~]#vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
[root@localhost ~]#setenforce 0 #使配置立即生效
1、yum安装MariaDB
[root@localhost ~]#yum install mariadb mariadb-server
2、启用MariaDB服务,覆盖my.cnfw文件并查看监听端口是否正常
[root@localhost ~]#systemctl start mariadb.service
[root@localhost ~]#cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可
3、设置ROOT密码(注:如果不设置密码默认密码为空)
[root@localhost ~]# mysqladmin -u root password "root"
4、登陆mysql
[root@localhost ~]# mysql -uroot -p
三、MariaDB程序类别及命令选项(注:命令使用几乎和MySql一致)
客户端程序常用选项
-u:指定登陆用户
-h:指定登陆主机
-p:指定登陆密码
-P:指定端口,默认监听端口:tcp/3306
-D:指定连接后默认使用的数据库
-H:指定产生html输出
-X:指定产生xml输出
客户端交互模式下常用命令
MariaDB [(none)]> help #列出所有命令
MariaDB [(none)]> \? #相当于help
MariaDB [(none)]> \c #取消命令执行
MariaDB [(none)]> \q #退出
MariaDB [(none)]> \! #运行shell命令
MariaDB [(none)]> \s #显示服务器端状态信息
命令行快捷键编辑
Ctrl+a: 快速移动光标至行首
Ctrl+e: 快速移动光标至行尾
Ctrl+w: 删除光标之前的单词
Ctrl+u: 删除行首至光标处的所有内容
Ctrl+y: 粘贴使用Ctrl+w或Ctrl+u删除的内容
四、MariaDB数据类型及属性修饰符
常见数据类型
字符型:CHAR、VARCARH、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOG、LONGBLOB
修饰符:NULL(允许为空)、NOT NULL(不允许为空)、DEFAULT 'string'(默认值,不适用于TEXT)、CHARACTER SET 'set'(设定字符集)、COLLATION 'collation'(设定字符集排序规则)、SHOW COLLATION(查看可用排序规则)、DEFAULT(不用于BLOB类型)
字符有通配符: %(匹配任意长度的任意字符)、_(匹配任意单个字符)
整型:TINYINT、SMALLINT、MEDIUMINT 、INT、BININT
修饰符:UNSIGNED(无符号)、NULL、NOT NULL、DEFAULT、AUTO_INCREMENT(自动增长)
特殊要求:非空,且必须是主键或惟一键
浮点型:FLOAT、DOUBLE
修饰符:NOT NULL、NULL、DEFAULT、UNSIGNED
布尔型:没有专用布尔型,其是TINYINT(1)的别名
日期时间型:DATE、TIME、DATETIME、TIMESTAMP、YEAR(2)、YEAR(4)
修饰符:NULL、NOT NULL、DEFAULT VALUE
内建类型:ENUM(枚举,表示仅能从给出的选项选择其中一个);如:ENUM('string1','string2'),SET(集合, 表示能使用给出的元素组合成字符串),如:SET('a','b','c')
修饰符:NULL、NOT NULL、DEFAULT ''
五、SQL(Structure Query Language)结构查询语言组成部分
DDL(Data Definition Language,数据定义语言:定义或改变表的结构、数据类型、表之间的链接和约束等):CREATE, DROP, ALTER
DML(Data Manipulation Language,数据操纵语言:数据库里的数据进行操作):SELECT, INSERT, UPDATE,DELETE
DCL(Data Control Language,数据控制语言:用来设置或更改数据库用户或角色权限的语句):GRANT, REVOKE,DENY
1)DDL操作
创建数据库:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
删除数据库:DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
修改数据库:ALTER {DATABASE | SCHEMA} [IF EXISTS] db_name
练习:创建数据库mydb01,删除该mydb01数据库
2)DML操作
插入数据:INSERT INTO
第一种:INSERT INTO tb_name [(clo1,col2……)] {VALUES|VALUE} (val1,val2)
第二种:INSERT INTO tb_name SET col1=val1,col2=val2,……
第三种:INSERT INTO tb_name SELECT clause
查询数据:SELECT [ALL | DISTINCT | DISTINCTROW ]
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
更新数据:UPDATE tb_name SET col_name1=val1,col_name2=val2,……
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...] :在限定所修改的行数前先做下排序
[LIMIT row_count] :限定所修改的行数据
注:UPDATE通常情况下,必须要使用WHERE子句,或者使用LIMIT限制要修改的行数。
删除数据: DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
3)进行DCL操作,先了解一下权限相关基础内容
A、权限类别分类:库级别、表级别、字段级别、管理类、程序类
B、管理类权限关键字
CREATE TEMPORARY TABLES:创建临时表,该表保存在内存中
CREATE USER:创建用户
FILE:在服务器上能够读取和写入文件
SUPER:杂项管理类的命令
SHOW DATABASES:用户是否能执行SHOW DATABASES命令,默认就赋予了
RELOAD:能够使用FLUSH和RESET命令
SHUTDOWN:关闭服务器
REPLICATION SLAVE:授权用户能够有复制的权限
REPLICATION CLIENT:向服务器查询该主机有哪些客户端
LOCK TABLES:显示施加表锁
PROCESS:查看线程列表,命令为SHOW PROCESSLIST;
C、库级别和表级别权限关键字
ALTER:修改表
ALTER ROUTINE:修改存储历程,包括存储过程和存储函数
CREATE:创建表和库
CREATE ROUTINE:创建存储过程和存储函数
CREATE VIEW:创建视图
DROP:删除表和库
EXECUTE:执行存储过程和存储函数
GRNAT OPTION:把自己获得的权限转赠给他人
INDEX:创建和删除索引
SHOW VIEW:查看一个视图是怎么被创建的
D、数据操作(表级别)权限关键字
SELECT:查询
INSERT:插入
UPDATE:更改
DELETE:删除
E、字段级别权限关键字:
SELECT(col1,...)
UPDATE(col1,...)
INSERT(col1,...)
F、所有权限:
ALL [PRIVILEGES]
DCL操作命令
GRANT:授权命令
GRANT priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [TABLE|FUNCTION|PROCEDURE] priv_level
TO username@hostname [IDENTIFIED BY 'password'], [username@hostname [],...]
[REQUIRE SSL] //必须基于SSL连接访问
[WITH with_option ...]
priv_level:
* //所有
| *.* //所有库的所有对象
| db_name.* //指定库的所有对象
| db_name.tbl_name //指定库的指定表
| tbl_name //指定表
| db_name.routine_name //指定库的存储历程,包括存储过程和存储函数
with_option:
GRANT OPTION //将自己的权限转赠给别人
| MAX_QUERIES_PER_HOUR count //每小时执行最多查询请求的个数
| MAX_UPDATES_PER_HOUR count //每小时执行最多更新的个数
| MAX_CONNECTIONS_PER_HOUR count //每小时最多建立连接次数
| MAX_USER_CONNECTIONS count //使用同一个帐号同时最多连接几个窗口
练习:添加用户bobo,密码为bobo,在test数据库中新建表SOO,授权该用户对该表为插入权限,插入一行数据测试,并且查询验证是否有权限
注:授权某用户权限需要在root用户权限
REVOKE:收回授权
REVOKE priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...
练习:收回test数据库表SOO插入权限
注:取消指定的权限,若想取消bobo用户的所有权限可以使用ALL选项:
MariaDB [(none)]> REVOKE ALL ON test.* FROM 'bobo'@'192.168.%.%';
Query OK, 0 rows affected (0.00 sec)
【转载自:http://blog.51cto.com/daisywei/1710705】