基础篇

通用语法及分类

  • DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)
  • DML: 数据操作语言,用来对数据库表中的数据进行增删改
  • DQL: 数据查询语言,用来查询数据库中表的记录
  • DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限

DDL(数据定义语言)

数据库操作

1
2
3
4
5
6
7
8
9
10
SHOW DATABASES;  //查询所有数据库

SELECT DATABASE(); //查询当前数据库

CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ]; //创建数据库:
for example : create databae user;

DROP DATABASE [ IF EXISTS ] 数据库名; //删除数据库:

USE 数据库名; //使用数据库:

注意事项

  • UTF8字符集长度为3字节,有些符号占4字节,所以推荐用utf8mb4字符集

表操作

1
2
3
4
5
SHOW TABLES;  //查询当前数据库所有表

DESC 表名; //查询表结构

SHOW CREATE TABLE 表名; //SHOW CREATE TABLE 表名

添加字段:
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
例:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';

修改数据类型:
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
例:将emp表的nickname字段修改为username,类型为varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';

删除字段:
ALTER TABLE 表名 DROP 字段名;

修改表名:
ALTER TABLE 表名 RENAME TO 新表名

删除表:
DROP TABLE [IF EXISTS] 表名;
删除表,并重新创建该表:
TRUNCATE TABLE 表名;

DML(数据操作语言)

添加数据

指定字段:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
全部字段:
INSERT INTO 表名 VALUES (值1, 值2, ...);
批量添加数据:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);

注意事项

  • 字符串和日期类型数据应该包含在引号中
  • 插入的数据大小应该在字段的规定范围内

更新和删除数据

修改数据:
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];
例:
UPDATE emp SET name = 'Jack' WHERE id = 1;

删除数据:
DELETE FROM 表名 [ WHERE 条件 ];

DQL(数据查询语言)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT  
字段列表
FROM
表名字段 //基本查询

WHERE
条件列表 //条件查询

GROUP BY
分组字段列表 //聚合查询

HAVING
分组后的条件列表 //分组查询

ORDER BY
排序字段列表 //排序查询

LIMIT
分页参数 //分页查询

基本查询

1、查询多个字段:
SELECT 字段1,字段2,。。。。FROM 表名
SELECT * FROM 表名(不建议,效率低)
2、设置别名:
SELECT 字段1 [as ‘别名’],字段2 [别名],。。。FROM 表名(as可省略)
3、去除重复记录:
SELECT DISTINCT 字段列表 FROM 表名

条件查询

比较运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
between……and 在某个范围内(前小后大)
in(…) 多选一,有一个符合条件就成
LIKE 占位符 模糊匹配(% 和 _)
IS NULL 是NULL

聚合查询(聚合函数)

函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和

分组查询

语法:
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];

排序查询(group by)

1
2
select workadd,count(*) as '地址数量' from employee where age <= 70 group by workadd having count(*) = 2;
//输出年龄小于70并且只有两名员工在同一个城市工作城市的城市名称

分页查询(很重要)

语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

例子:

1
2
3
4
-- 查询第一页数据,展示10条  
SELECT * FROM employee LIMIT 0, 10;
-- 查询第二页
SELECT * FROM employee LIMIT 10, 10;
注意事项
  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
  • 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10

DQL执行顺序

FROM -> WHERE -> GROUP BY -> Having -> SELECT -> 选择列 -> Distinct -> Top -> ORDER BY -> LIMIT

DQL编写顺序

SELECT -> FROM -> WHERE -> GROUP BY ->HAVING -> ORDER BY -> LIMIT

DCL(数据控制语言)

管理用户

查询用户:

1
2
USE mysql;
SELECT * FROM user;

创建用户:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

修改用户密码:
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

删除用户:
DROP USER '用户名'@'主机名';

例子:

1
2
3
4
5
6
7
8
9
– 创建用户test,只能在当前主机localhost访问
create user ‘test‘@’localhost’ identified by ‘123456’;
– 创建用户test,能在任意主机访问
create user ‘test‘@’%’ identified by ‘123456’;
create user ‘test’ identified by ‘123456’;
– 修改密码
alter user ‘test‘@’localhost’ identified with mysql_native_password by ‘1234’;
– 删除用户
drop user ‘test‘@’localhost’;
注意事项
  • 主机名可以使用 % 通配