事物的并发问题:
脏读:例如事物没有执行完,就读。比如 转账一半,读,rollback();--最可怕
重复读:两次读取的不一致。即读取第二次,事物更新
幻读(虚读):对同一张表两次查询不一致,因为另一事物插入记录
四大隔离级别:
SERIALIZABLE (串行化)
不会出现任何并发问题,因为就是串行。 性能最差
REPEATABLE READ(可重复读)(Mysql 默认)
可处理脏读和不可重复读
性能比串行话好
READ COMMITTED(读已提交数据)(Orcle默认)
防止脏读,不可处理 不可重复读,不可处理幻读
性能比可重复度好
READ UNCOMMITTED(读未提交数据)
什么都处理不了
性能最好,坚决不用;
三种并发问题,四种隔离级别
Mysql :
如何查看数据库的隔离级别:
select @@tx_isolation
如何设置数据隔离级别:
set transaction isolationlevel(4-1);
JDBC:
如何设置隔离级别:
conn.setTransationisolation(int leve);
Connection.TRANSACTION_READ_UNCOMMITTED 性能最好,不处理任何问题,不用
Connection.TRANSACTION_READ_COMMITTED 读已提交 只处理脏读, Orcale 默认
Connection.TRANSACTION_REPEATABLE_READ 可读重复性 可处理脏读与重复读 Mysql默认
Connection.TRANSACTION_SERIALIZABLE 任何并发问题都不会出现 性能最差
如何获取隔离级别: