DDL(数据定义语言)
DDL,全称为 Data Definition Language,用来定义数据库对象(数据库,表,字段)。
数据库操作
- 查询所有数据库
SHOW DATABASE;
- 查询当前数据库
SELECT DATABASE();
- 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
- 删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
- 使用某个数据库
USE 数据库名;
表操作
- 查询当前数据库所有表
SHOW TABLES;
- 查询表结构
DESC 表名;
- 查询指定表的建表语句
SHOW CREATE TABLE 表名;
- 创建表
- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
- 删除表
DROP TABLE [IF EXISTS] 表名;
- 删除表,并重新创建该表
TRUNCATE TABLE 表名;
字段操作
- 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
- 在指定字段后添加新字段
alter table 表名 add 新字段名 类型(长度) [是否为空] [COMMENT 注释] after 指定字段;
- 修改字段类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
- 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
- 修改字段默认值
alter table 表名 modify column 字段名 类型(长度) default 默认值 [COMMENT 注释];
- 删除字段
ALTER TABLE 表名 DROP 字段名;
DML(数据操作语言)
DML,全称为 Data Manipulation Language,用来对数据库表中的数据进行增删改
插入数据
- 插入数据时,指定字段顺序需要和值顺序一致
- 字符串和日期型数据需要用引号(“” 或 ‘’)包括
- 插入的数据大小应满足字段定义的大小要求
- 给指定字段插入数据
INSERT INTO 表名(字段名1,字段名2,字段名3,......) VALUES(值1,值2,值3,......);
- 给全部字段插入数据
INSERT INTO 表名 VALUES(值1,值2,值3,......);
- 批量插入数据
INSERT INTO 表名(字段名1,字段名2,字段名3,......) VALUES(值1,值2,值3,......),(值1,值2,值3,......),(值1,值2,值3,......),······;
INSERT INTO 表名 VALUES(值1,值2,值3,......),(值1,值2,值3,......),(值1,值2,值3,......),······;
- 插入数据(存在则修改记录值,不存在则插入)
REPLACE INTO 表名(字段名1,字段名2,字段名3,......) VALUES(值1,值2,值3,......);
- 插入符合条件的数据
INSERT INTO 表名(字段名1,字段名2,字段名3,......)
SELECT 所有要插入的字段名
FROM 所查的表
WHERE 筛选条件
修改数据
- 修改所有数据
UPDATE 表名
SET 字段名1=值1,字段名2=值2,......;
- 修改指定数据
UPDATE 表名
SET 字段名1=值1,字段名2=值2,......;
WHERE 筛选条件;
删除数据
- 删除整张表
DELETE
FROM 表名;
- 删除表中指定数据
DELETE
FROM 表名
WHERE 筛选条件;
DQL(数据查询语言)
DQL,全称为 Data Query Language,用来查询数据库表中的记录
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 筛选条件
GROUP BY 分组依据
HAVING 分组后的筛选条件
ORDER BY 排序字段名
LIMIT 分页数据
基本查询
- 查询多个字段
SELECT 字段1,字段2,字段3,......
FROM 表名;
- 查询所有字段
SELECT *
FROM 表名;
- 设置字段别名
SELECT 字段1 AS 别名1,字段2 AS 别名2,字段3 AS 别名3,......
FROM 表名;
- 去除重复记录
SELECT DISTINCT 字段列表
FROM 表名;
条件查询
- 大于(>)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 > 具体值;
- 小于(<)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 < 具体值;
- 等于(=)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 = 具体值;
- 大于等于(>=)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 >= 具体值;
- 小于等于(<=)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 <= 具体值;
- 不等于(<> 或 !=)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 != 具体值;
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 <> 具体值;
- 逻辑与(AND 或 &&)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (筛选条件1) AND (筛选条件2) AND (筛选条件3) ······;
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (筛选条件1) && (筛选条件2) && (筛选条件3) ······;
- 逻辑或(OR 或 ||)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (筛选条件1) OR (筛选条件2) OR (筛选条件3) ······;
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (筛选条件1) || (筛选条件2) || (筛选条件3) ······;
- 逻辑非(NOT 或 !)
- 在某个范围之内
(BETWEEN ··· AND ··· )来实现
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 BETWEEN 初始值 AND 终止值;
联结条件来实现
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (字段名 >= 起始值) AND (字段名 <= 终止值)
- 在某个范围之外
(NOT BETWEEN ··· AND ··· )来实现
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT BETWEEN 初始值 AND 终止值;
联结条件来实现
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (字段名 < 起始值) OR (字段名 > 终止值)
- 在多个值之中(IN)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 IN (具体值1,具体值2,具体值3,······);
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 IN (
SELECT 字段名
FROM 表名
WHERE 筛选条件
);
- 不在多个值之中(NOT IN)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT IN (具体值1,具体值2,具体值3,······);
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT IN (
SELECT 字段名
FROM 表名
WHERE 筛选条件
);
- 相似(LIKE)
开头内容相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "具体值%";
中间内容相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "%具体值%";
结尾内容相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "%具体值";
第二位内容相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "_具体值%";
第三位内容相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "__具体值%";
倒数第二位内容相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值_";
倒数第三位内容相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值__";
- 不相似(NOT LIKE)
开头内容不相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "具体值%";
中间内容不相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值%";
结尾内容不相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值";
第二位内容不相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "_具体值%";
第三位内容不相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "__具体值%";
倒数第二位内容不相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值_";
倒数第三位内容不相似
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值__";
- 为空(IS NULL)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 IS NULL;
- 不为空(IS NOT NULL)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 IS NOT NULL;
- 正则表达式(REGEXP)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 REGEXP 正则表达式;
聚合查询
- 计算行数
SELECT COUNT(*)
FROM 表名;
- 计算某字段不重复的行数
SELECT COUNT(DISTINCT 字段名)
FROM 表名
[WHERE 筛选条件];
- 计算某字段最大值
SELECT MAX(字段名)
FROM 表名
[WHERE 筛选条件];
- 计算某字段最小值
SELECT MIN(字段名)
FROM 表名
[WHERE 筛选条件];
- 计算某字段平均数
SELECT AVG(字段名)
FROM 表名
[WHERE 筛选条件];
分组查询
- GROUP可以单独使用,但HAVING必须和GROUP BY 一起使用
- 使用GROUP BY 时,SELECT后必须有分组依据
- 使用GROUP BY时,SELECT后不能跟单独字段值,否则将违反约束,可以跟分组依据和聚合函数
- 计算某字段的每组最大值
SELECT 分组依据,MAX(字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
- 计算某字段的每组最小值
SELECT 分组依据,MIN(字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
- 计算某字段的每组平均值
SELECT 分组依据,AVG(字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
- 计算某字段的每组行数
SELECT 分组依据,COUNT(字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
- 计算某字段的每组无重复值行数
SELECT 分组依据,COUNT(DISTINCT 字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
排序查询
- 单字段排升序排序
SELECT 所查询的所有字段名
FROM 所查询的所有表
[WHERE 筛选条件]
ORDER BY 排序字段 ;
SELECT 所查询的所有字段名
FROM 所查询的所有表
[WHERE 筛选条件]
ORDER BY 排序字段 ASC;
- 单字段排降序排序
SELECT 所查询的所有字段名
FROM 所查询的所有表
[WHERE 筛选条件]
ORDER BY 排序字段 DESC;
- 多字段排序(按照顺序依次进行排序)
SELECT 所查询的所有字段名
FROM 所查询的所有表
[WHERE 筛选条件]
ORDER BY 排序字段1 DESC,排序字段2,排序字段3,······;
分页查询
- 起始索引从0开始,起始索引=(查询页码 -1)* 每页显示记录数
- 分页查询关键字在不同数据库是不同的,在MySQL中是LIMIT
- 如果查询的是第一页数据,起始索引可以省略不写,直接简写为LIMIT 查询记录数
- 分页查询
SELECT 字段列表
FROM 表名
LIMIT 起始索引,查询记录数;
DCL(数据控制语言)
DCL,全称为 Data Control Language,用来创建数据库用户、控制数据库的访问权限
管理用户
- 查询用户
USE 数据库名;
SELECT *
FROM user;
- 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
- 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
- 删除用户
DROP USER '用户名'@'主机名';
权限控制
MySQL存在多种权限,常用的有以下几种权限:
权限 意义 ALL,ALL PRIVILEGES 所有权限 SELECT 查询数据 INSERT 插入数据 UPDATE 修改数据 DELETE 删除数据 ALTER 修改表 DROP 删除数据库/表/视图 CREATE 创建数据库/表
- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
- 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
- 撤销权限
REVOKE 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';