解答
事务的并发问题
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
MySQL事务的隔离级别
读取未提交:最低的隔离级别,可读取未提交的数据可能会导致脏读,幻读或不可重复读
读取已提交:允许读取已经提交的数据,可以阻止脏读,但是还是可能导致幻读或不可重复读
可重复读:对同一字段多次读取的结果都是一致的,可以防止脏读,不可重复读,但是幻读依然可能发生
串行化:最高的隔离价格,可以防止脏读,不可重复读,幻读
MySQL的事物隔离级别
读未提交
不可重复读
可重复读
串行化
mysql默认可重复读 mvcc实现
读未提交
读以提交
可重复读
串行
已读未提交
读已提交
可重复读
串行化
MySQL默认的级别是可重复读
读未提交:脏读,不可重复读,幻读
读已提交:不可重复读,幻读
可重复读:幻读
序列化读
对数据库不是太了解
读未提交
读已提交
可重复读
串行化
读未提交
读已提交
可重复读
串行化
读未提交,不可重复读,可重复读,可串行化