事务的特性
ACID特性
原子性:表示一组操作,要么都成功,要么都失败
一致性:一组操作,数据必须要一致。
- 比如小温给小奥转账一万,中间出现了异常,小奥都有收到一万,首先小温的钱不会少。
隔离性:多个事务并发的操作,多个事务之间隔离的
持久性:事务提交之后,数据真正生效了。
三种读的问题
脏读:一个事务读取到另一个事务里面没有提交的记录
不可重复读:一个事务读取到另一事务里面提交的记录,另一个事务里面做update操作,通过第一个事务读取的数据不一样了
虚读(幻读):一个事务读取到另一个事务里面提交的记录,另一个事务做了insert操作,通过第一个事务读取的数据不一样了
数据库的隔离级别
Serializable:串行的.避免脏读、不可重复读和虚读发生
Repeatable read:重复读. 避免脏读、不可重复读.但是虚读还是有可能发生的
Read committed:已提交读.避免脏读.但是不可重复读和虚读有可能发生
Read uncommitted:未提交读.脏读、不可重复读、虚读都可能发生
级别的高低:Serializable > Repeatable read > Read committed > Read uncommitted
在实际的设置中,一般不设置 最高和最低的级别
mysql默认的隔离级别 Repeatable read 重复读
查看当前数据库的隔离级别: select @@tx_isolation;
set session transaction isolation level 设置事务隔离级别