【01】数据库三大范式及数据库事务ACID

三大范式

  1. 列不可分,每一列都是不可再分的最小原子单位
  2. 要有主键,不存在部分依赖(在联合主键的前提下,所有的非主键字段必须完全依赖于主键)
  3. 不存在传递依赖(所有的非主键字段必须直接依赖于主键)

事务ACID

  1. atomicity 原子性:事务包含的操作要么全部失败,要么全部回滚。事务的操作如果成功就必须完全应用到数据库,如果失败就不能对数据库有任何影响。
  2. consistency 一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态中。(A和B两者的钱加起来是5000,不管如何转帐,转了几次,两个人加起来还是五千)
  3. isolation 隔离性:当多个用户并发访问数据库时,比如操作同一张表,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  4. durability 持久性:事务一旦被提交了,那么对数据库的改变就是永久的,接下来即便在数据库系统故障时,也不会丢失事务提交的操作。

事务并发问题

  1. 脏读:事务A读取了事务B中未提交的数据。
  2. 不可重复读:事务A多次读取同一数据,事务B在A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据结果不一致。
  3. 幻读:事务A查询数据库,事务B新增一条,A再查,结果不一致。

隔离级别

  1. 读未提交:Read Uncommitted:最低级别,脏读、可重复读、幻读都会发生
  2. 读已提交:Read Committed:可避免脏读
  3. 可重复读:Repeated Read:避免脏读,可重复读,MySQL默认隔离级别
  4. 串行化: Serializable:可避免全部,锁表,效率低
posted @ 2020-11-12 23:48  王某飞  阅读(49)  评论(0)    收藏  举报