范式
1、 字段值唯一
2、 Where条件
3、 Group by 和order by
4、 Update、delete的where条件
5、 Distinct字段
6、 多表join操作时,表尽量不超过3个,对where条件创建索引,对连接的字段创建索引且类型一致
7、 多个单列索引在多条件查询时只会生效一个索引(MySQL 会选择其中一个限制最严格的作为索引),所以在多条件联合查询的时候最好创建联合索引。
1、 WHERE 条件(包括 GROUP BY、ORDER BY)里用不到的字段不需要创建索引
2、 如果表记录太少,比如少于 100
-- 创建
CREATE VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition
-- 修改
ALTER VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition
-- 删除
DROP VIEW view_name
笛卡尔乘积是一个数学运算。假设我有两个集合X和Y,那么X和Y的笛卡尔积就是X和Y的所有可能组合,也就是第一个对象来自于X,第二个对象来自于Y的所有可能。 笛卡尔积也称为交叉连接,英文是CROSS JOIN,它的作用就是可以把任意表进行连接,即使这两张表不相关。
SELECT * FROM player, team;
SELECT player_id, player.team_id, player_name, height, team_name FROM player, team WHERE player.team_id = team.tea
如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部,这种嵌套的执行方式就称为关联子查询。
-- 查找最高身高的球员的身高和名字
SELECT player_name, height FROM player WHERE height = (SELECT max(height) FROM player);
子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做非关联子查询。
eg1:
-- 查找每个球队中大于平均身高的球员有哪些,并显示他
每个层级的锁数量是有限制的,因为锁会占用内存空间,锁空间的大小是有限的。
当某个层级的锁数量超过了这个层级的阈值时,就会进行锁升级。
锁升级就是用更大粒度的锁替代多个更小粒度的锁,比如InnoDB中行锁升级为表锁,这样做的好处是占用的锁空间降低了,但同时数据的并发度也下降了。
如果事务涉及多个表,操作比较复杂,那么可以尽量一次锁定所有的资源,而不是逐步来获取,这样可以减少死锁发生的概率;
如果事务需要更新数据表中的大部分数据,数据表又比较大,这时可以采用锁升级的方式,比如将行级锁升级为表级锁,从而减少死锁产生的概率;
不同事务并发读写多张数据表,可以约定访问表的顺序,采用相
CREATE PROCEDURE `calc_hp_max`()
BEGIN
-- 创建接收游标的变量
DECLARE hp INT;
-- 创建总数变量
DECLARE hp_sum INT DEFAULT 0;
-- 创建结束标志变量
DECLARE done INT DEFAULT false;
-- 定义游标
DECLARE cur_hero CURSOR FOR SELECT hp_max FROM heros;
-- 指
START TRANSACTION 或者 BEGIN,作用是显式开启一个事务。
COMMIT:提交事务。当提交事务后,对数据库的修改是永久性的。
ROLLBACK 或者 ROLLBACK TO [SAVEPOINT],意为回滚事务。意思是撤销正在进行的所有没有提交的修改,或者将事务回滚到某个保存点。
SAVEPOINT:在事务中创建保存点,方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。
RELEASE SAVEPOINT:删除某个保存点。
SET TRANSACTION,设置事务的隔离级别。
使用事务有两种方式,分别为隐式事务和显式事务。隐式事务实际上就是自动提交
-- 创建
CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
需要执行的语句
END
-- eg1
DELIMITER //
CREATE PROCEDURE `add_num`(IN n INT)
BEGIN
DECLARE i INT;
DECLARE sum INT;
SET i = 1;
SET sum = 0;
WHILE i <= n DO
SET sum = sum + i;
SET i = i
Structured Query Language
SQL有两个主要的标准,分别是SQL92和SQL99。92和99代表了标准提出的时间,SQL92就是92年提出的标准规范。当然除了SQL92和SQL99以外,还存在 SQL-86
、SQL-89
、SQL:2003
、SQL:2008
、SQL:2011
和 SQL:2016
等其他的标准。
SQL标准 | 特点 |
---|---|
SQL92 | 形式简单, SQL语句较长,可读性差 |
SQL99 | 语法复杂,可读性强 |
在SQL中,关键字和函数名是不用区分字母大小写的。比如 MySQL 在 Linux 的环境下,数