对MySql中命令进行详细总结。
- 最近详细过了下SQL有关知识,以及刷完了Leetcode上所有有关数据库的题目。因此在这里想开启一段MySql探讨之旅,从常用命令->数据库基础知识->安全保护机制->并发版本控制(锁协议)->物理索引机制->LeetCode优秀题目->JDBC中间件->数据库系统架构等进行一份超全总结。不完善的地方小伙伴们可以在评论里提醒作者进行补充。
1.SQL分类
SQL一共分为四类:
数据定义语言(DDL)
: 创建、删除、修改:模式、数据库、索引、视图、表结构等;数据操作语言(DML)
: 对关系表进行增、删、改;数据控制语言(DCL)
: 定义数据控访问权限和安全级别,及创建用户和相关授权;数据查询语言(DQL)
: 对关系表进行查询;
平时我们用的较多的主要是DML、DQL。
2.DDL
数据库的创建与删除
1
2
3
4# 创建数据库
create database 数据库名;
# 删除数据库
drop database 数据库名 [distinct|casecade];表的创建、删除、修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 创建表
create table 表名(
列名1 数据类型1 列级完整性约束1,
列名2 数据类型2 列级完整性约束2
) CHARACTER set gbk;
# 删除表
drop table 表名 [distinct|casecade];
# 增加列
alter table 表名 add 列名 数据类型 [列级完整性约束];
# 删除列
alter table 表名 drop 列名;
# 添加表级完整性约束
alter table 表名 add 表级完整性约束;
# 修改列
alter table 表名 modify 列名 新的数据类型 [列级完整性约束]
# 删除主键
alter table drop primary key;索引的定义与删除
1
2
3
4
5
6
7
8# 创建索引
create [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 on 表名(列名) [using 索引方法];
# 删除索引
drop index 索引名 on 表名;
# 查看已创建索引
show index from 表名;视图的定义与删除
1
2
3
4
5
6
7
8# 创建视图
create view 视图名 as select语句;
# 查询视图
describe 视图名;
# 删除视图
drop 视图名;
3.DML
表中插入数据
1
2
3
4
5
6
7insert into 表名 values
(0,'小明',18,180.00,2,1,0),
(0,'小月月',18,180.00,2,2,1),
insert into 表名(列名1,列名2) values
('小明',18),
('小月月',18)删除表中数据
1
2
3
4
5
6# 删除部分数据
delete from table 表名 where name = '小明'
# 删除所有数据
delete from 表名;
truncate table 表名;(属于先删除表结构再新建表结构,数据量大的时候可使用)修改表中数据
1
update 表名 set 列名 = 新值 where name = '小明'
4.DCL
用户管理
1
2
3
4
5
6
7
8# 创建用户
create user 用户名 identified by 密码;
# 删除用户
drop user 用户名@'%';
# 查看权限
show grants for 用户名;权限管理
1
2
3
4
5# 授权
GRANT <权限> ON <数据库>.<表名> TO <用户名>;
# 删除权限
remove 权限 on 数据库.表名 from 用户名;
5.DQL
一般格式
1
2
3
4
5select [all|distinct] 目标列 from 表名或视图或派生表
where条件
group by 列名
having 条件表达式
order by 列名 [ASC|DESC];连接查询
1
select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列
嵌套查询
1
2
3
4select Sname from student
where Sno IN(
select ...
)集合查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 并集
select * from student where Sdept=''CS
UNION
select * from student where Sage>19;
# 交集(Mysql不能直接支持交集,需要自行实现)
SELECT a.oname,a.odesc FROM
object_a a INNER JOIN object_b b
ON a.oname=b.oname AND a.odesc=b.odesc
# 差集(Mysql不能直接支持差集,需要自行实现)
SELECT a.oname, a.odesc FROM
object_a a LEFT JOIN object_b b ON a.oname = b.oname AND a.odesc = b.odesc
WHERE b.id IS NULL基于派生表的查询
1
select Sno,Cno From SC, (select * from student);
常用聚集函数
1
2
3
4
5COUNT(个数)
SUM(求和)
AVG(求平均)
MAX(最大值)
MIN(最小值)