ACID:
A - atomicity 原子性,指事务包含的所有操作要么全部成功,要么全部失败回滚,不可能停滞在某个中间环节
C – consistency 一致性,指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
I – Isolation 隔离性,当多个用户并发访问数据库时,比如操作同一张表,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
D – Durability 持久性,指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失事务的操作。
并发操作会带来哪些数据不一致性? (ABC)
A 丢失修改:两个事务读入同一数据并修改,T2提交的结果破坏了T1提交的结果,比如T1 读A修改为A-1, T2读A修改为A-1,实际上T2读的是A-1,修改后变为A-2.
B 不可重复读:在一个事务两次读数据之间的间隙,另一个事务对该数据访问并进行了修改(同一条件,不同时间,读取的数据值不同,存在update)
C 脏读:是指当一个事务对数据进行了修改但还没提交到数据库时,另一个事务访问并使用了这个数据。
幻影读: 同一事务在两个不同的时间段执行相同的查询条件得到的结果不一致(同样的条件,第一次和第二次读出的记录个数不一样,存在add/delete记录)
现在来看看MySQL数据库为我们提供的四种隔离级别:
① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
③ Read committed (读已提交):可避免脏读的发生。
④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。
在MySQL数据库中默认的隔离级别为Repeatableread (可重复读)。
在MySQL数据库中查看当前事务的隔离级别:
select @@tx_isolation;
在MySQL数据库中设置事务的隔离 级别:
set [glogal | session] transaction isolation level 隔离级别名称;
set tx_isolation=’隔离级别名称;’