mysql 基础(事务)
事务四大特性:
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
并发事务问题:
两个及以上事务同时操作一个数据库或表时所引发的问题
脏读:读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并一定最终存在的数据
不可重复读:不可重复读指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了。通常针对数据更新(UPDATE)操作
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。针对数据插入(INSERT)操作
事务隔离级别:是用来解决并发事务问题的,事务隔离级别越高数据越安全但性能越低
隔离级别 | 脏读 | 不可重复读 | 幻读 |
Read uncommitted(读未提交) | √ | √ | √ |
Read committed(读已提交) | x | √ | √ |
Repeatable Read(mysql默认) | x | x | √ |
Serializable(串行化) | x | x | x |
查看隔离级别:
MySQL5.0+:
1.查看当前会话隔离级别
select @@tx_isolation;
2.查看系统当前隔离级别
select @@global.tx_isolation;
MySQL8.0+:
1.查看当前会话隔离级别
select @@transaction_isolation;
2.查看系统当前隔离级别
select @@global.transaction_isolation;
设置隔离级别:
1.当前会话修改
set session transaction isolation level 需要设置的事务隔离级别;
2. mysql.ini配置修改
#可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
[mysqld]
transaction-isolation = REPEATABLE-READ