事务并发问题
1、脏读:一个事务读取到另一个事务还未提交的数据。
2、不可重复读:在一个事务中多次读取同一个数据时,结果出现不一致。 (对应的是UPDATE修改操作)
3、幻读:在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。
不可重复读注重于数据的修改,而幻读注重于数据的插入。(对应的是插入INSERT 或 DELETE 操作)
事务隔离级别
读未提交、读已提交、可重复读、可串行化。
1、read uncommitted : 读未提交 :哪个问题都不能解决
2、read committed:读已提交 :可以解决脏读 —- oracle默认的
3、repeatable read:可重复读:可以解决脏读和不可重复读 —mysql默认的
4、serializable:可串行化:可以解决脏读不可重复读和虚读—相当于锁表
读未提交:就是一个事务可以读取另一个未提交事务的数据。
读已提交:就是一个事务要等另一个事务提交后才能读取数据。
可重复读:就是在开始读取数据(事务开启)时,不再允许修改操作
可串行化:不允许事务并发执行,强制事务串行执行,就是在读取的每一行数据上都加上了锁,读写相互都会阻塞。这种隔离级别最高,是最安全的,性能最低,不会出现脏读,不可重复读,幻读,丢失更新。