事务是一组原子性的SQL查询,或者说是一个独立的工作单元。要么全部执行,要么全部不执行。
1.2 事务的特性(ACID)①原子性(atomicity)
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部回滚,对于一个事务来说,不可能只执行其中的一部分操作
②一致性(consistency)
数据库总是从一个一致性的状态转换到另外一个一致性的状态。
③隔离性(isolation)
一个事务所做的修改在最终提交以前,对其他事务是不可见的。也就是说多个并发事务之间要相互隔离。
④持久性(durability)
一旦事务提交,则其所做的修改就会永久的保存在数据库中,接下来即使数据库系统崩溃了,修改的数据也不会丢失
1.3 事务的隔离级别①读未提交(READ UNCOMMITTED)
事务中的修改,即使没有提交,对其他事务也是可见的,也就是说事务可以读取到未提交的数据,这也被称为脏读。
②读已提交(READ COMMITTED)
一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的,这个级别有时候也叫不可重复读,因为两次执行同样的查询,可能会得到不一样的结果。
③可重复读(REPEATABLE READ)
该隔离级别保证了在同一个事务中多次读取同样的记录的结果是一致的,但是无法解决另外一个幻读的问题,所谓的幻读就是指当某个事务在读取某个范围内的记录是,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时就会产生幻行。
④可串行化(SERIALIZABLE)
SERIALIZABLE是最高的隔离级别,通过强制事务的串行执行,避免了前面说的幻读问题,简单来说,SERIALIZABLE会在读取的每一行数据上加上锁。
public interface PlatformTransactionManager { /** * 获取事务 */ TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; /** * 提交 */ void commit(TransactionStatus status) throws TransactionException; /** * 回滚 */ void rollback(TransactionStatus status) throws TransactionException; }