CRUD :
Create(创建), Retrieve(读取),Update(更新),Delete(删除)
一、Create
语法:
INSERT [INTO] table_name [(column [, column] …)] VALUES (value_list) [, (value_list)] … value_list: value, [, value] …
创建表: 
1.1、单行数据 + 全列插入

1.2、多行数据 + 指定列插入
单行数据+指定列插入: 
多行数据+指定列插入:

1.3、插入否则更新
由于 主键 或者 唯一键 对应的值已经存在而导致插入失败
可以选择性的进行同步更新操作 语法:
INSERT … ON DUPLICATE KEY UPDATE column = value [, column = value] …

1.4 替换
主键 或者 唯一键 没有冲突,则直接插入; 主键 或者 唯一键 如果冲突,则删除后再插入

多个信息冲突时:

二、Retrieve
语法:
SELECT [DISTINCT] {* | {column [, column] …} [FROM table_name] [WHERE …] [ORDER BY column [ASC | DESC], …] LIMIT …
2.1、全列查询
通常情况下不建议使用 * 进行全列查询
- 查询的列越多,意味着需要传输的数据量越大;
- 可能会影响到索引的使用。(索引待后面课程讲解)

2.2、指定列查询
指定列的顺序不需要按定义表的顺序来

2.3、查询字段为表达式
表达式不包含字段

表达式包含一个字段

表达式包含多个字段

2.4、为查询结果指定别名
语法:
SELECT column [AS] alias_name […] FROM table_name;

2.5 结果去重
select distinct 列名 from 表名;

没有去重,因为ID这一列不重复,去重必须要求一行内容都重复。

2.6 WHERE 条件
比较运算符:
运算符 | 说明 |
---|
>, >=, <, <= | 大于,大于等于,小于,小于等于 | = | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL | <=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) | !=, <> | 不等于 | BETWEEN a0 AND a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) | IN (option, …) | 如果是 option 中的任意一个,返回 TRUE(1) | IS NULL | 是 NULL | IS NOT NULL | 不是 NULL | LIKE | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 |
逻辑运算符:
运算符 | 说明 |
---|
AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) | OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) | NOT | 条件为 TRUE(1),结果为 FALSE(0) |
>, >=, <, <=,=

<=> : 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
直接=NULL无法找到(不进行任何数值运算)

想找到空字段必须: 
NOT:条件为 TRUE(1),结果为 FALSE(0) 如上图:取反
AND :语法: 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
BETWEEN a0 AND a1 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)

OR: 任意一个条件为 TRUE(1), 结果为 TRUE(1)

IN (option, …):如果是 option 中的任意一个,返回 TRUE(1)

LIKE:模糊匹配
% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

where可以用别名进行查找嘛?
 我们发现并不可以,为什么,这里的where语句中,无法使用别名呢?
因为我们需要先按照条件进行筛选我们的数据 ,再按照要求计算数据 ; 不先筛选出我们需要的数据,计算出来的数据毫无意义。

2.7、结果排序
语法:
– ASC 为升序(从小到大) – DESC 为降序(从大到小) – 默认为 ASC SELECT … FROM table_name [WHERE …] ORDER BY column [ASC|DESC], […];
注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

2.8、筛选分页结果
语法:
– 起始下标为 0 – 从 0 开始,筛选 n 条结果 SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n; – 从 s 开始,筛选 n 条结果 SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT s, n; – 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用 SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n OFFSET s;
建议:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死


三、Update
语法:
UPDATE table_name SET column = expr [, column = expr …] [WHERE …] [ORDER BY …] [LIMIT …]
对查询到的结果进行列值更新

四、 Delete
语法:
DELETE FROM table_name [WHERE …] [ORDER BY …] [LIMIT …]

4.1、Delete删除整张表数据

 
4.2、截断表
语法:
TRUNCATE [TABLE] table_name
注意:这个操作慎用
- 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
- 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚;
- 会重置 AUTO_INCREMENT 项


|