数据库事务:
ACID四大特性:
1.原子性atomicity:事务的原子性确保动作要么全部完成,要么完全不起作用
2.一致性consistency:执行事务的前后,数据要保持一致。
3.隔离性isolation:并发访问数据库时,一个用户的是会务不被其他事务所干扰,各自事务之间的数据库是独立的
4.持久性durability:一个事务被提交后,保持的数据是持久的。
解决问题的方式
如果出现数据库错误操作,系统可以以事务作为边界恢复
多个用户同时操作数据库时,数据库可以为事务为单位进行并发控制
常见的并发异常有:脏写,丢失更新,脏读,不可重复读,幻读
事务锁:通常分为共享锁和排他锁
共享锁(S 锁):多个事务对同一个数据可以共享一把锁,可以访问数据,但是只能读,不能修改
加锁方式 SQL语句后加上 LOCK IN SHARE MODE;
排它锁(X锁):一个事务获取了一个数据行的排它锁,其他事务就不能在获取改行的锁
加锁方式:delete/update/insert 默认加上了X锁,在SQL语句后加上 FOR UPDATE
eg:意向共享锁,意向排他锁
事务隔离级别:TransactionDefinition定义了五个表示隔离级别的常量
1.TransactionDefinition.ISOLATION_DEFAULT表示默认值
2.TransactionDefinition.ISOLATION_READ_UNCOMMITTED表示可以读取另一个事务的修改没有提交的数据,它不能防止脏读,不可重复读和幻读
3.TransactionDefinition.ISOLATION_READ_COMMITTED,事务可以读取另一个事务已经提交的数据,可以防止脏读
4.TransactionDefinition.ISOLATION_REPEATABLE_READ 多次重复执行某个查询,可以防止脏读,不重复读
5.TransactionDefinition.ISOLATION_SERIALIZABLE,依次执行,可以防止脏读,不可重复读和幻读,但是它会严重影响程序的性能。
基于注解的事务:
1.在需要事务的Dao类中加上@Transactional注解
2.在需要事务的管理方法中加上@Transactional(propagation=Propagation.REQUIRED)的类似注解
3.配置文件中执行注解驱动<tx:annotation-driven transaction-manager=“transactionManager” />