数据库学习笔记
基础篇
通用语法及分类
- DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)
- DML: 数据操作语言,用来对数据库表中的数据进行增删改
- DQL: 数据查询语言,用来查询数据库中表的记录
- DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限
DDL(数据定义语言)
数据库操作
1 | SHOW DATABASES; //查询所有数据库 |
注意事项
- UTF8字符集长度为3字节,有些符号占4字节,所以推荐用utf8mb4字符集
表操作
1 | SHOW TABLES; //查询当前数据库所有表 |
添加字段: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 | SELECT |
基本查询
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 | select workadd,count(*) as '地址数量' from employee where age <= 70 group by workadd having count(*) = 2; |
分页查询(很重要)
语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
例子:
1 | -- 查询第一页数据,展示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’; |
注意事项
- 主机名可以使用 % 通配