一、数据库事务遵循 ACID原则
原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
一致性(Consistency)
一致性是指事务必须使数据库从一个一致的状态变到另外一个一致的状态,
也就是执行事务之前和之后的状态都必须处于一致的状态。
隔离性(Isolation)
隔离性是指当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,
不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
持久性(Durability)
持久性是指一个事务一旦被提交了,那么对于数据库中的数据改变就是永久性的,
即便是在数据库系统遭遇到故障的情况下也不会丢失提交事务的操作。
二、事务可能引起的问题
脏读(Dirty Read)
一个事务处理过程里读取了另一个未提交的事务中的数据
不可重复读(NonRepeatable Read)
对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,
这是由于在查询的间隔期间,另外一个事务修改并提交了该数据
幻读(Phantom Read)
在一个事务中读取到了别的事务插入的数据,导致前后不一致
三、事务的隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。
而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。
MySQL默认的事务隔离级别为repeatable-read
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
read-uncommitted | 是 | 是 | 是 |
read-committed | 否 | 是 | 是 |
repeatable-read | 否 | 否 | 是 |
serializable | 否 | 否 | 否 |
四、查看修改MySQL的事务隔离级别
查看当前事务的隔离级别
>select @@tx_isolation;
修改事务的隔离级别
>set [global | session] transaction isolation level 隔离级别名称;
>set tx_isolation=’隔离级别名称;