一、事务的并发问题?
多个事务并发执行时就会出现并发问题, 具体分为以下三个。
- 脏读
当事务A修改个数据,但未提交时, 事务B又读取了被修改的数据, 然后事务A又回滚了事务(rollback),这种情况就称为脏读。 - 不可重复读
当事务A首先读取的数据, 事务B修改了该数据,并且提交的事务。事务A再次读取数据,两次读取的数据不一致。(数据的数值发生了改变) - 幻读
当事务A进行多次的查询,由于事务B的插入或删除造成事务A查询到的数据记录条数不一致。(数据记录的条数不一致)
二、事务的隔离级别
1.分类:
1.Read uncommited(读未提交)
2.Read commited(读已提交)
3.Repeatable Read(可重复读、MySQL 默认)
4.Serializable(串行化)
2.不同隔离级别可能造成的问题。
提示: 从上到下隔离级别逐渐增高,隔离级别越高,效率越低。
MySQL默认的隔离级别是Repeatable Read,oracle,sql server —read commited
3.查看与设置隔离级别
-- 查看
SELECT @@transcation_isolation;
-- 设置
SELECT @@transcation_isolation = {隔离级别};
SELECT [session][global] transcation isolation level {隔离级别};
[ ] 里边可以省略, session代表当前会话, global代表全局