DDL(数据库、表结构、表字段)
数据库操作
查询
SHOW DATABASES; 查询所有数据库
SELECT DATABASE(); 查询当前数据库
创建
CREATE DATABASE 表名; 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则] IF NOT EXISTS 如果数据库不存在则创建,存在则取消本次操作(可选) 字符集:UTF-8这类字符编码
删除
DROP DATABASE 表名; 删除数据库
DROP DATABASE [IF EXISTS] 数据库名
使用
USE 数据库名; 使用数据库
表操作
查询
SHOW TABLES; 查询当前数据库所有表
DESC 表名; 查询表结构
SHOW CREATE TABLE 表名; 查询指定表建表语句
创建
CREATE TABLE 建表;
CREATE TABLE 表名( 字段1 字段1类型 [COMMENT 字段1注释],
字段2 字段2类型 [COMMENT 字段2注释],
字段3 字段3类型 [COMMENT 字段3注释],
......
字段n 字段n类型 [COMMENT 字段n注释]
)[COMMENT 表注释];
修改
ADD 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
CHANGE修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
RENAME修改表名
ALTER TABLE 表名 RENAME TO 新表名;
删除
DROP 删除字段
ALTER TABLE 表名 DROP 字段名;
DROP 删除表
DROP TABLE [IF EXISTS] 表名; 删除表 TRUNCATE TABLE 表名; 删除后重新创建该表(相当于删除了表内数据,但保留表)
DML(数据的增删改)
PS:
字符串与日期类型数据应包含在引号中。
添加(INSERT)
指定字段添加数据
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, ...), VALUES(值1, 值2, ...), VALUES(值1, 值2, ...);
修改(UPDATE)
UPDATE 表名 SET 字段1=值1, 字段2=值2, ...[WHERE 条件]; 不加WHERE的话会更新表内所有的记录的字段。
删除(DELETE)
DELETE FROM 表名 [WHERE 条件] 删除对应记录,不加WHERE则删除所有记录。
DQL(数据的查询)
DQL语法(全):
SELECT 字段 FROM 表名 WHERE 条件 GROUP BY 分组字段 HAVING 分组后条件 ORDER BY 排序字段 LIMIT 分页参数
执行顺序:
FROM > WHERE > GROUP BY > 聚合函数 > HAVING > SELECT > ORDER BY > LIMIT
基本查询(SELECT):
查询多个字段:
SELECT 字段1,字段2,字段3... FROM 表名; 查询多个字段信息 SELECT * FROM 表名; 查询该表内所有数据
设置别名:
SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] ... FROM 表名; 在返回的结果中,字段名会替换为别名。 AS可以省略。
去除重复记录:
SELECT DISTINCT 字段列表 FROM 表名;
条件查询(WHERE):
SELECT 字段 FROM 表名 WHERE 条件;
条件(我不熟的):
BETWEEN ... AND ... 在某个范围(小的在前)之内(双闭)
WHERE id BETWEEN 20 AND 25;
IN(...) 在in之后的列表中的值,多选一
WHERE id IN (1, 5, 7);
LIKE 占位符
模糊匹配(‘_’匹配单个字符, ‘%’匹配任意个字符, 此外可以添加别的字符,是一一对应的) WHERE name LIKE '__';
IS NULL 是NULL
WHERE name IS NULL;
AND 或 && 并且(多个条件同时成立)
OR 或 || 或者(多个条件任意一个成立)
NOT 或 ! 非,不是
聚合函数(count......)
介绍:
将一列数据作为一个整体,进行纵向计算。 null 不参与计算。 对于一组数据只返回一个值。 多组数据多个值。
常见聚合函数:
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
语法:
SELECT COUNT(*) FROM 表名; 该表的总的数据量;
SELECT COUNT(字段) FROM 表名; 统计该字段不为空的数量;
SELECT avg(age) FROM 表名 WHERE 字段=值; 统计字段为值的平均年龄;
分组查询(GROUP BY)
SELECT 字段 FROM 表名 [WHERE 条件] GROUP BY 字段 [HAVING 分组后过滤条件] 此处的HAVING与WHERE都是同一作用,筛选结果,先由WHERE筛选,在对结果进行分组,最后再对每组的结果用HAVING过滤。WHERE是不能对聚合函数进行判断的,但是HAVING可以。
分组后可以看成所有的字段对应的值会被模糊化,聚合入一组中,而HAVING可以通过聚合函数得到其对应的值进行过滤。
排序查询(ORDER BY)
SELECT 字段 FROM 表名 ORDER BY 字段1 排序方式1 字段2 排序方式 2;
ORDER BY写在最后面 排序方式只有两种: 升序 : ASC(默认) 降序 : DESC
先按第一字段排序,若系统则按第二字段排序。
分页查询(LIMIT)
SELECT 字段 FROM 表名 LIMIT 起始索引, 查询记录数; 起始索引就是从第几条开始返回,从0开始,查询记录数则是每页数据量。 若是第一条开始,索引可省略不写。 起始索引为10,则说明从第11条取到第20条。
PS: 其是数据库方言,LIMIT为MySQL数据库的。
DCL(管理用户与数据库访问权限)
用户管理
查询用户
USE mysql; SELECT * FROM user;
用户都存在mysql库的user表中。
%代表所有,如果主机名用%替换,则其代表该用户可在任意主机
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户
DROP USER '用户名'@'主机名';
权限控制
用户创建后需要分配权限,需要添加权限。
这里可以用*来代表所有数据库或者表。
权限:
ALL, ALL PRIVILEGES 所有权限 SELECT 查询数据 INSERT 插入数据 UPDATE 修改数据 DELETE 删除数据 ALTER 修改表 DROP 删除数据库/表/视图 CREATE 创建数据库/表
查询权限:
SHOW GRANTS FOR '用户名'@'主机名'
授予权限:
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
撤销权限:
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

2740

被折叠的 条评论
为什么被折叠?



