事务的特性
ACID
1 原子性(A) 原子性是指事物是一个不可分割的工作单位 事务中的操作要不都发生 要不都不发生(整体)
2 一致性(C) 事务钱后数据的完整性必须保持一致(一致)
3 隔离性(I) 事务的隔离性是指多个用户并发访问数据库的时候 一个用户的事务不能被其他用户的事务所干扰 多个并发事务之间数据要相互隔离(隔离)
4 持久性(D) 持久性是指另一个事务一旦被提交 它对数据库的改变就是永久性的 接下来即使数据库发生故障也不应该对其有任何影响
并发访问问题
如果不考虑隔离性 事务存在3中并发访问的问题
1 赃读 一个事务读到另一个事务未提交的数据
2 不可重复读 一个事务读到另一个事务已经提交的数据 引发另一个事务 在事务中的次
3 虚读 幻读 一个事务读到了顶一个事务已经提交的数据 导致另一个事务 在事务中多次查询的结果不一致
隔离级别 :解决问题
l 数据库规范规定了4种隔离级别,分别用于描述两个事务并发的所有情况。
1. read uncommitted 读未提交,一个事务读到另一个事务没有提交的数据。
a) 存放:3个问题(脏读、不可重复读、虚读)。
b) 解决:0个问题
2. read committed 读已提交,一个事务读到另一个事务已经提交的数据。
a) 存放:2个问题(不可重复读、虚读)。
b) 解决:1个问题(脏读)
3. repeatable read :可重复读,在一个事务中读到的数据始终保持一致,无论另一个事务是否提交。
a) 存放:1个问题(虚读)。
b) 解决:2个问题(脏读、不可重复读)
4. serializable 串行化,同时只能执行一个事务,相当于事务中的单线程。
a) 存放:0个问题。
b) 解决:3个问题(脏读、不可重复读、虚读)
l 安全和性能对比
n 安全性:serializable > repeatable read > read committed > read uncommitted
n 性能 : serializable < repeatable read < read committed < read uncommitted