DDL

数据库

  1. -- 创建数据库
  2. create database 数据库名 [character set 编码] [collate 校对规则] [if not exists 数据库名];
  3. -- 查看字符集和校对规则
  4. show character set;
  5. -- 查看所有数据库
  6. show databases;
  7. -- 查看数据库的创建信息
  8. show create database 数据库名;
  9. -- 使用数据库
  10. use 数据库名;
  11. -- 查看正在使用的数据库
  12. select database();
  13. -- 修改数据库
  14. alter database 数据库名 default character set 编码方式 collate 校对规则;
  15. -- 删除数据库
  16. drop database 数据库名 [if exists 数据库名];
  • 编码:utf8mb4、utf8 、GBK等
  • 校对规则:utf8_general_ci(不区分大小写)、utf8_general_cs(区分大小写)、utf8_bin(二进制)等

数据表

  1. -- 创建数据库
  2. create table 表名(
  3. 字段名 数据类型 完整性约束条件 [character set 字符集名称] [collate 比较规则],
  4. 字段名 数据类型 完整性约束条件,
  5. 字段名 数据类型 完整性约束条件
  6. )engine=存储引擎 default charset=编码方式;
  7. -- 查看数据表
  8. show create table 表名;
  9. desc 表名;
  10. -- 查看表的所有列信息
  11. show columns from 表名;
  12. 福塔 (Ben Forta). MySQL必知必会 (图灵程序设计丛书 97) (p. 33). 人民邮电出版社. Kindle 版本.
  13. -- 修改表名
  14. alter table 表名 rename 新表名;
  15. -- 修改字段名
  16. alter table 表名 change 旧字段名 新字段名 新数据类型;
  17. -- 修改字段数据类型
  18. alter table 表名 modify 字段名 数据类型;
  19. -- 添加字段
  20. alter table 表名 add 字段名 数据类型 [约束条件] [first/after已存在字段名];
  21. -- 删除字段
  22. alter table 表名 drop 字段名;
  23. -- 修改字段排列位置
  24. alter table 表名 modify 字段名1 数据类型 first/after 字段名2;
  25. -- 添加外键
  26. alter table 表名 add constraint [外键名] foreign key(主表字段) references 外表表名(字段名);
  27. -- 删除外键
  28. alter table 表名 drop foreign key 外键名;
  29. -- 查看表状态
  30. show table status like '表名';
  31. show table status from 数据库名 like '表名';
  32. -- 清空表
  33. truncate table 表名;
  34. -- 查看表的约束
  35. select * from information_schema.table_constraints where table_name = '表名称';
  • 数据类型
    • 整数型:TINYINT、SMALLINT、MEDIUMINT、**INT**、BIGINT
    • 浮点型:FLOAT、DOUBLE
    • 定点数:**DECIMAL**
    • 逻辑型:BIT
    • 日期型:YEAR、TIME、DATE、DATETIME、**TIMESTAMP**
    • 文本型:CHAR、**VARCHAR**、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
    • 枚举型:ENUM
    • 集合型:SET
    • 二进制字符串:BINARY、VARBINARY、TINYBLOG、BLOG、MEDIUMBLOB、LONGBLOB
    • 其他…
  • 约束
    • primary key:主键约束
    • foreign key:外键约束
    • not null:非空约束
    • unique:唯一性约束
    • default:默认值约束
    • auto_increment:字段值自增
    • unsigned:无符号约束
    • character set:字符集约束

视图

  1. -- 创建/修改
  2. create [or replace]
  3. [algorithm = {undefined | merge | temptable}]
  4. view 视图名称 [(字段列表)]
  5. as 查询语句
  6. [with [cascaded|local] check option];
  7. -- 查看
  8. show tables;
  9. desc|describe 视图名称;
  10. show table status like '视图名称';
  11. show create view 视图名称;
  12. -- 修改
  13. alter view 视图名称 as 查询语句;
  14. -- 删除
  15. drop view if exists 视图名称 [, 视图名称2, ...];

DML

  1. -- 添加数据
  2. insert into 表名 values(值1, 2, ......);
  3. insert into 表名(字段1,字段2,...)values(值1,值2,...);
  4. insert into 表名 set 字段名1=值1[,字段名2=值2,...];
  5. insert into 表名[(字段名1,字段名2,...)]values(值1,值2,...),(值1,值2,...)...;
  6. -- 更新数据
  7. update 表名 set 字段名1=值1[,字段名2=值2,...] [where 条件表达式];
  8. -- 删除数据
  9. delete from 表名 [where 条件表达式];
  10. truncate [table] 表名;

DQL

  1. -- 简单查询
  2. select * from 表名;
  3. -- 按条件查询
  4. select * from 表名 where 条件表达式 [and 条件表达式];
  5. select * from 表名 where 条件表达式 [or 条件表达式];
  6. select * from 表名 where 字段名 [not] in(元素1,元素2,......);
  7. select * from 表名 where 字段名 [not] between 1 and 2;
  8. select * from 表名 where 字段名 is [not] null;
  9. select * from 表名 where 字段名 [not] like '匹配字符串' [escape '特殊字符'];
  10. select * from 表名 where 字段名 regexp '正则表达式';
  11. -- 去重查询
  12. select distinct 字段名 from 表名;
  13. -- 排序查询
  14. select 字段名1,字段名2,... from 表名 order by 字段名1 [asc|desc],字段名2 [asc|desc]...;
  15. -- 分组查询
  16. select 字段名1,字段名2,... from 表名 group by 字段名1, 字段名2, ... [having 条件表达式] [with rollup];
  17. -- 限制查询
  18. select 字段名1,字段名2,... from 表名 limit [位置偏移量, ] 记录数;
  19. -- 取别名
  20. select * from 表名 [as] 别名;
  21. -- 交叉连接查询
  22. select * from 1, 2 where 1.字段 = 2.字段 [and 条件];
  23. select * from 1 [[cross] join] 2 where 1.字段 = 2.字段 [and 条件];
  24. -- 内连接查询
  25. select * from 1 [inner] join 2 on 1.关系字段 = 2.关系字段;
  26. -- 外连接查询
  27. select * from 1 left | right | [outer] join 2 on 1.关系字段 = 2.关系字段 where 条件;
  28. -- 自然连接
  29. select * from 1 natural join 2;
  30. -- USING连接
  31. select * from 1 join 2 using(关系字段);
  32. -- 合并查询
  33. select 字段 from 1 UNION [ALL] select 字段 from 2;
  34. -- 复合查询
  35. select * from 1 where x in (select x from 2);
  36. select * from 1 where x = (select x from 2);
  37. select * from 1 where x > | < any(select x from 2);
  38. select * from 1 where x > | < all(select x from 2);
  39. select * from 1 where exists(select x from 2);
  40. --
  41. select distinct ... from ... join ... on ... where ... group by ... having ... order by ... limit ...;

TCL

  1. -- 开启事务
  2. start transaction;
  3. -- 提交事务
  4. commit;
  5. -- 取消事务(回滚,只能针对未提交的事务)
  6. rollback;
  7. -- 设置隔离级别
  8. set session transaction isolation level read uncommitted;
  9. set session transaction isolation level read committed;
  10. set session transaction isolation level repeatable read;
  11. set session transaction isolation level serializable;

DCL

  1. -- 创建用户
  2. create user '用户名'@'主机名' identified by '密码';
  3. insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)values('主机名','用户名',password('密码'),',',',');
  4. -- 删除用户
  5. drop user '用户名'@'主机地址';
  6. delete from mysql.user where user='用户名' and host='主机名';
  7. -- 修改root密码
  8. set password = password('新密码');
  9. update user set password=password('新密码') where user='用户名' and host='主机名';
  10. -- 修改普通用户密码
  11. grant usage on 数据库.表 to '用户名'@'主机名' identified by [password]'new_password';
  12. update mysql.user set password=password('新密码') where user='用户名' and host='主机名';
  13. set password for '用户名'@'主机名'=password('新密码');
  14. -- 普通用户修改密码
  15. set password = password('新密码');
  16. -- 授权
  17. grant 权限 [(columns)][,privileges[(columns)]] on 数据库.表 to '用户名'@'主机' [identified by [密码] [,'用户名'@'主机' [identified by 密码] ... [with grant option ...]
  18. -- 查看权限
  19. show grants for '用户名'@'主机';
  20. -- 回收权限
  21. revoke privileges [columns][,privileges[(columns)]] on 数据库.表 from '用户名'@'主机';
  22. revoke all privileges,grant option from '用户名'@'主机';
  • 权限:all privileges表示所有权限,其余可通过 show privileges 查看
  • columns:表示权限作用于某一列,省略不写则权限作用于整个表
  • grant option:将自己的权限授予其他用户

其他

  1. # 备份单个数据库
  2. mysqldump -uusername -ppassword dbname>filename.sql
  3. # 备份多个数据库
  4. mysqldump -uusername -ppassword --databases dbname1 dbname2...>filename.sql
  5. # 备份所有数据库
  6. mysqldump -uusername -ppassword --all-databases>filename.sql
  7. # 数据库还原(注意,还原的只是数据,库不能被还原)
  8. mysql -uusername -ppassword dbname<filename.sql
  9. # 修改密码
  10. mysqladmin -uusername -ppassword password 新密码