关系型数据库的常见组件:
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privileges
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler
SQL语句:
DDL:Data Defination Language,数据定义语言 //创建或删除数据库组件的
CREATE,DROP,ALTER
DML:Data Manipulation Language,数据操纵语言 //主要是向表中插入数据,删除数据,修改数据,查询数据
INSERT(REPLACE),DELETE,UPDATA,SELECT
DCL: Data Control Language,数据控制语言,主要用来控制权限,授权和收回权限等
GRANT,REVOKE
数据类型: 字符型
定长字符型:CHAR(#),BINARY(#) //varchar最多65535个
变长字符型:VARCHAR(#),VARBINARY(#) //char最多255个字符
对象存储:
TEXT:变长的,不区分大小写,text最大可存储44G个字符
BLOB:变长的,区分字符大小写
内置类型:
ENUM
SET 数值
精确数值型
整型:int
tinyint:1bytes
smallint:2bytes
mediumint:3bytes
int:4bytes
bigint:8bytes
十进制:decimal
近似数值型
单精度浮点型
float
双精度浮点型
double
日期时间型:
日期:DATE
时间:TIME
日期时间:DATETIME
时间戳:TIMETAMP
年份:YEAR(2),YEAR(4)
修饰符:
所有类型适用:
NOT NULL //非空约束
DEFAULT VALUE //设定默认值
PRIMARY KEY //定义单个字段为主键
UNIQUE KEY //定义单个字段受唯一性约束
数值型使用:
UNSIGNED //无符号,仅用来表示正数
AUTO_INCREMENT //自增长
DDL:CREATE,DRRP,ALTER
数据库: CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
DROP DATABASE|SCHEMA [IF EXISTX] 'DB_NAME';
CHARACTER SET [=] 'character set name' //指明字符集
COLLATE [=] 'collate name' //指明排序规则
查看支持的所有字符集:SHOW CHARACTER SET;
查看支持的所有排序规则:SHOW COLLATION;
查看数据库:SHOW DATABASES;
获取命令使用帮助:
mysql> HELP KEYWORD 比如:HELP CREATE DATABASE;
表:
创建表:
CREATE TABLE [IF NOT EXISTS] tb_name (col1 datatype 修饰符,col2 datatype 修饰符) ENGINE='engine_name'
col1 type1
PRIMARY KEY(col1,col2,...)
INDEX(col1,...)
UNIQUE KEY(col1,...)
主键示例:
mysql> USE testdb; Database changed mysql> CREATE table tb1 (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED); //指明单个主键 mysql> CREATE table tb2 (id int UNSIGNED NOT NULL,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name)); //组合主键
查看所有的引擎:SHOW ENGINES;
查看表:SHOW TABLES [FROM db_name];
查看表结构:DESC [db_name.]tb_name;
获取帮助:
mysql> HELP CREATE TABLE;
查看创建命令:
mysql> SHOW CREATE TABLE tb1_name;
查看表状态:
SHOW TABLE STATUS LIKE 'tb1_name'G; //G表示竖排查看
删除表:
DROP TABLE [IF EXISTS] tbl_name;
修改表
ALTER TABLE 'tbl_name'
字段:
添加字段:add
ADD col1 data_type [FIRST|AFTER col_name]
示例:mysql> ALTER TABLE tb1 ADD gender ENUM('m','f');
删除字段:drop
示例:mysql> ALTER TABLE tb1 DROP sid;
修改字段:alter,change,modify //如果修改字段名称使用change,修改字段的属性定义使用modify,删除字段的默认值使用alter
示例:将字段名id改为sid
mysql> ALTER TABLE tb1 CHANGE id sid int UNSIGNED NOT NULL;
索引
添加索引:add
示例;
添加唯一键索引:mysql> ALTER TABLE tb1 ADD UNIQUE KEY(name);
添加索引:mysql> ALTER TABLE tb1 ADD INDEX(age);
删除索引: drop
示例:mysql> ALTER TABLE tb1 DROP age;
查看表上的索引:SHOW INDEXES FROM [db.name.]tbl_name;
表选项
索引:
索引是特殊数据结构;定义在查找时作为查找条件的字段;
索引:可以有索引名称
创建索引: CREATE INDEX index_name ON tbl_name (index_col_name,...);
删除索引:
DROP INDEX index_name ON tbl_name;
示例:DROP INDEX name ON tb1;
DML:INSERT,DELETE,SELECT,UPDATE
INSERT INTO:
INSERT [INTO] tbl_name [(col_name,...)] {VALUES|VALUE}(val1,...),(...),...
示例:mysql> INSERT INTO tb1 VALUES(1,'yang guo','m'),(2,'guo xiang','f');
DELETE:
DELETE FROM tb1_name [WHERE clause] [ORDER BY 'col_name' [DESC]][LIMIT [m,]n];
SELECT:
SELECT col1,col2,... FROM tbl_name [WHERE clause][ORDER BY 'col_name' [DESC]][LIMIT [m,]n];
字段表示法:
*:所有字段
as:字段别名,col1 AS alias1;
WHERE clause"
操作符:
>,<,>=,<=,==,!=
BETWEEN ... AND ...
LIKE:
%:任意长度的任意字符
_:任意单个字符
RLIKE:基于正则表达式匹配
IS NULL
IS NOT NULL
条件逻辑操作:
and
or
not
UPDATE:
UPDATE tbl_name SET col1=new_val1,col2=new_val2,... [WHERE clause] [ORDER BY 'col_name' [DESC]][LIMIT [m,]n];
用户账号及权限管理:
用户账号:'user'@'host'
user:用户名 host:此用户访问mysqld服务时允许通过哪些主机远程创建连接; host可以使用IP、网络地址、主机名、通配符(%和_);
禁止检查主机名:
my.cnf,[mysqld]
skip_name_resolve=yes
创建用户账号:
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
示例:mysql> CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wpp@ss';
远程登录 # mysql -uwpuser -h192.168.2.20 -p
删除用户:
DROP USER 'username'@'host' ...;
授权:
权限:管理权限、数据库、表、字段、存储例程
GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'hsot' [IDENTIFIED BY 'password'][WITH GRANT OPTION]; priv_type:ALL [PRIVILEGES] db_name.tb_name: *.*:所有库的所有表 db_name.*:指定库的所有表 db_name.tb_name:指定库的指定表 db_name.routine_name:db_name后面跟的是一个存储例程或存储函数
WITH GRANT OPTION:user获得的授权能够转授给其他用户
授权示例:
GRANT SELECT,DELETE ON testdb.* TO 'testuser'@'%' IDENTIFIED BY 'testpass';
查看指定用户获得的授权:
SHOW GRANTS FOR 'user'@'host'; //比如:
示例:
SHOW GRANTS FOR 'wpuser'@'%';
SHOW GRANTS FOR CURRENT_USER; //查看当前用户的授权
回收权限:
REVOKE priv_type,...ON db_name.tb_name FROM 'user'@'host';
示例:REVOKE DELETE ON testdb.* FROM 'testuser'@'%';
注意:MariaDB服务进程启动时会读取mysql库中的所有授权表至内存中
(1)GRANT或REVOKE等执行权限操作会保存于表中,MariaDB的服务进程会自动重读授权表
(2)对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表
mysql> FLUSH PRIVILEGES;