数据库原理

一、数据库三大范式:

1、列不可再分。
  2、属性依赖于主键。
  3、属性直接依赖于主键,不依赖其他属性。

二、数据库事务的四大特性:(ACID)
  1、原子性:一个事务的所有操作要么全部完成,要么全部失败回滚。
  2、一致性:事务提交前后,数据库整体保持一致性状态。如A、B之间转账后,总金额不变。
  3、隔离性:并发事务间不能互相干扰,应保持隔离。
  4、持久性:事务成功提交后,对数据库的改变应该是永久性的。

三、事务不隔离产生的问题:
  1、脏读:一个事务读取了另一个事务还没有提交的数据。
  2、不可重复读:一个事务读取时,另一个事务修改并提交了数据。(update、delete)
  3、幻读:一个事务读取时,另一个事务新增并提交了数据。(insert)

四、数据库事务隔离级别:
  1、Serializable(串行化):可避免脏读、不可重复读、幻读。
  2、Repeatable read(可重复读):可避免脏读、不可重复读。
  3、Read committed(读已提交):可避免脏读。
  4、Read uncommitted(读未提交):最低级别,无法保证。

mysql默认事务隔离级别为:Repeatable read(可重复读)

sqlserver默认事务隔离级别为:Read committed(读已提交)

spring的@Transaction默认使用数据库的隔离级别