三大范式
- 列不可分,每一列都是不可再分的最小原子单位
- 要有主键,不存在部分依赖(在联合主键的前提下,所有的非主键字段必须完全依赖于主键)
- 不存在传递依赖(所有的非主键字段必须直接依赖于主键)
事务ACID
- atomicity 原子性:事务包含的操作要么全部失败,要么全部回滚。事务的操作如果成功就必须完全应用到数据库,如果失败就不能对数据库有任何影响。
- consistency 一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态中。(A和B两者的钱加起来是5000,不管如何转帐,转了几次,两个人加起来还是五千)
- isolation 隔离性:当多个用户并发访问数据库时,比如操作同一张表,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
- durability 持久性:事务一旦被提交了,那么对数据库的改变就是永久的,接下来即便在数据库系统故障时,也不会丢失事务提交的操作。
事务并发问题
- 脏读:事务A读取了事务B中未提交的数据。
- 不可重复读:事务A多次读取同一数据,事务B在A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据结果不一致。
- 幻读:事务A查询数据库,事务B新增一条,A再查,结果不一致。
隔离级别
- 读未提交:Read Uncommitted:最低级别,脏读、可重复读、幻读都会发生
- 读已提交:Read Committed:可避免脏读
- 可重复读:Repeated Read:避免脏读,可重复读,MySQL默认隔离级别
- 串行化: Serializable:可避免全部,锁表,效率低
posted @
2020-11-12 23:48
王某飞
阅读(
49)
评论()
收藏
举报