事务与锁
事务的四个特性:
- 原子性:事务所有的操作,要么全部完成,要么全不完成,不会结束在某个中间环节
- 隔离性:当多个事务并发访问数据库中的同一个数据时,所表现出来的相互关系
- 持久性:事务完成之后,事务所做的修改持久化保存,不会丢失
- 一致性:事务开始之前和事务结束之后数据库的完整性限制未被破坏
设计高性能的表结构
范式
设计数据库结构过程中所要遵循的规则和指导方法,有1/2/3/BC/4/5 NF六种范式
优点:避免数据冗余,减少数据库空间,数据变更速度快
缺点:范式等级越高,表的数量越多,获取数据时表关联过多,性能较差
反范式
范式设计的表无法满足性能需求时,需要根据业务场景,在范式的基础之上灵活设计
基础规范
- 回归存储的基本职能
- 查询时,尽量单表查询
- 杜绝大事务、大SQL、大批量、大字段等性能杀手
统一规范
- 默认存储引擎innodb
- 默认字符集utf8mb4
- 关闭大小写
- 开启per-table表空间
- ip用int unsigned存储,非char(15),INET_ATON/INET_NTOA
- 时间类型使用timestamp
禁用功能(这些非常影响性能,且不好排错)
- enum、set
- blob、text
- 视图、event
- 存储过程、触发器
- 禁用列为NULL
- 禁止varbinary、blob存储图片、文件等
命名规范
表名:
- 所有表名小写
- 不允许使用-、空格
- 不允许其他字符作为名称
多对多联合查询
增加一个中间表,记录两个表的联合关系