只有多个事务并发时需要考虑并发事务
并发事务问题:
脏读 (dirty read) :读到另外一个事务未提交更新的数据,即读到了脏数据。
不可重复读 (unrepeatable read):对同一记录的两次读取不一致,因为另一事务对该记录进行了修改。
幻读 (虚读) :对同一张表的两次查询不一致,因为另一事务插入或删除了一条记录。
不可重复读针对的是一个事务范围内两个相同的查询却返回了不同数据。
幻读的重点在于新增或者删除,第1次和第2次读出来的记录数不一样。
隔离级别:
1 serializable(串行化)
*不会出现任何并发问题,因为对同一数据的访问是串行的,非并发访问的。
*性能最差。
2 repeatable read (可重复读)(MySql默认)
*防止脏读和不可重复读,不能处理幻读问题。
*性能比serialiable好。
3 read commited (读已提交数据)(Oracle默认)
*防止脏读。
*性能比repeatable read好。
4 read uncommited (读未提交数据)
*可能出现任何事务并发问题。
*性能最好。
MySql的隔离级别可以通过以下语句来查看
select @@tx_isolation
- 1
设置MySql的隔离级别
set transaction isolationlevel [4选1]