事务的隔离性以及隔离级别
当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性。
在介绍数据库提供的各种隔离级别之前,我们先看看如果不考虑事务的隔离性,会发生的几种问题:
1.脏读,在一个事务处理过程里读取了另一个未提交的事务中的数据。
2.不可重复读:在同一个事务中,重复执行相同的sql,查询到的结果却不同。这是由于在查询间隔,被另一个事务修改并提交了。
3.幻读:一个事务在前后两次查同一个范围时,后一次查询看到了前一次查询没有看到的行。
四种隔离级别
1.读未提交(Read uncommitted):最低级别,以上问题均无法解决
2.读已提交(Read committed):可避免脏读
3.可重复读(repeatable-read):确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可避免脏读和不可重复读,仍会出现幻读。
4.串行化(Serializable ):最严格的事务隔离级别,要求所有事务被串行执行。可避免脏读,不可重复读,幻读。
Mysql的事务隔离级别
Mysql默认的事务隔离级别是可重复读。但是我们在项目中Mysql一般用读已提交。