紅葉 - 三范式
type: channel
link: https://kkjz.xyz/index.php/tag/%E4%B8%89%E8%8C%83%E5%BC%8F/
items: sql相关笔记和一些面试问题

sql相关笔记和一些面试问题
type: item
date: 2022-10-13T15:34:00+08:00
description: DML（data manipulation language）是数据操纵语言：它们是SELECT、UPDATE、INSERT、DELETE，就象它的名字一样，这4条命令是用来对数据库里的数据进行操作的语言。DDL（data definition language）是数据定义语言：DDL比DML要多，主要的命令有CREATE、ALTER、DROP等，DDL主要是用在定义或改变表（TABLE）的结构，数据类型，表之间的链接和约束等初始化工作上，他们大多在建立表时使用。DCL（DataControlLanguage）是数据库控制语言：是用来设置或更改数据库用户或角色权限的语句，包括（grant,deny,revoke等）语句。DMLDML操作中，DELETE FROM 可以通过SET autocommit = FALSE;来使用ROLLBACK，在commit之前能够回滚数据SELECTsql92语法：SELECT (distinct)....,....,....(存在聚合函数) FROM ...,....,.... WHERE 多表的连接条件 AND 不包含聚合函数的过滤条件 GROUP BY ...,.... HAVING 包含聚合函数的过滤条件 ORDER BY ....,...(ASC / DESC ) LIMIT ...,....sql99语法：除了GROUP BY和LIMIT外，其他位置都可以申明子查询SELECT (distinct) ....,....,....(存在聚合函数) FROM ... (LEFT / RIGHT)JOIN ....ON 多表的连接条件 (LEFT / RIGHT)JOIN ... ON .... WHERE 不包含聚合函数的过滤条件 GROUP BY ...,.... HAVING 包含聚合函数的过滤条件 ORDER BY ....,...(ASC / DESC ) LIMIT ...,....SQL语句的执行过程：FROM ...,...-> (LEFT/RIGNT JOIN) ->ON -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT数据增删改# 添加数据 INSERT INTO emp1[(字段名)] [ VALUES (4,'Jim',5000), (5,'张俊杰',5500); ]; [ # 直接插入查询结果 SELECT employee_id,last_name,salary,hire_date # 查询的字段一定要与添加到的表的字段一一对应 FROM employees WHERE department_id IN (70,60); ] # 更新数据 UPDATE emp1 SET hire_date = CURDATE(),salary = 6000 WHERE id = 4; # 删除 DELETE [emp1] FROM emp1 WHERE id = 1; # 不指定某行就情况整个表 # MySQL8的新特性：计算列 CREATE TABLE test1( a INT, b INT, c INT GENERATED ALWAYS AS (a + b) VIRTUAL #字段c即为计算列 ); 约束# 使用添加约束的方法 ADD CONSTRAINT constraint_name [UNIQUE(字段列表)] [UNIQUE KEY(字段列表);] / ADD UNIQUE KEY(字段列表);重点：非空约束 唯一性约束，主键约束，默认值约束# 建表时 CREATE TABLE 表名称( 字段名 数据类型, 字段名 数据类型 NOT NULL, 字段名 数据类型 [unique][unique key], 字段名 数据类型 primary key(字段名) [auto_increment], 字段名 数据类型 default 默认值, [[constraint 约束名] unique key(字段名)], / [unique key(字段列表)], primary key(字段列表) [auto_increment]# 复合主键 ); # 建表后 alter table 表名称 modify 字段名 数据类型 not null; alter table 表名称 modify 字段名 字段类型 unique; / alter table 表名称 add unique key(字段列表); ALTER TABLE 表名称 MODIFY [COLUMN] 字段名 字段类型 PRIMARY KEY; / ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表)…