一、事务概述
事务是一个不可分割的整体。
事务ACID特性:原子性(Atomicty)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
事务的隔离级别
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE_READ
SERIALIZABLE
从上往下,级别越来越高,并发性越来越差,安全性越来越高。
二、事务所面临的问题
定义的事务的隔离级别是为了解决数据在高并发下产生的问题:Dirty Read(脏读)、Unrepreatable Read(不可重复读)、Phantom Read(幻读)
脏读示例
不可重复读
幻读
概述
脏读:事务A读取了事务B未提交的数据,并在这个基础上又做了其他操作
不可重复读:事务A读取了事务B已提交的更改数据
幻读:事务A读取了事务B已提交的新增数据
结论:不允许脏读,后两条大多数情况不考虑。
JDBC也提供了四类事务隔离级别。mysql默认是READ_COMMITTED。
其他可以通过代码查看
DatabaseMetaData metaData = DBUtil.getConnection().getMetaData(); int defaultTransactionIsolation = metaData.getDefaultTransactionIsolation();
数据库隔离事务,其实是锁。插入数据时,就锁定表,锁表。更新数据时,就是锁行。