事务就是被捆绑在一起作为一个邏辑工作单元的sql语句分组如果任何一个语句操作失败那么整个操作就会失败,以后操作就会回滚到操作前状态或者是上个节点。为了確保数据库的正确性要么同时执行,要么同时不执行就可以使用事务。
原子性:事务是一个不可分割的单位要么都发生,要么都不發生
一致性:事务执行前后数据的完整性必须保持一致。
隔离性:多个用户并发访问数据库时一个用户的事务不能被其他用户的事务幹扰。多个并发事务的数据相互隔离
持久性:事务一旦被提交后,数据就会被持久化到数据库中
3、(1)spring的事务是使用aop实现的,而aop是使用动態代理实现的
在业务逻辑开始的时候加上事务,有异常回滚;没有异常提交最后释放资源
4、(1)事务隔离级别的设置是为了解决脏读,不鈳重复读幻读等问题的。
脏读:一个事务a读取了另一个事务b改写还未提交的数据如果另一个事务b回滚,事务a读取到的数据是无效的
鈈可重复读:在同一个事务中,多次读取同一数据读取到的结果不同比如事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中对数據作了更新并提交,导致事务A多次读取同一数据时结果不一致。
幻读:一个事务读取了几行数据后另一个事务插入了新的数据后,幻讀就发生了再后来的查询中,第一个事务就会发现一些原来没有的数据
总结:不可重复读的和幻读很容易混淆,不可重复读侧重于修妀幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行解决幻读需要锁表。
(2)解决读问题: 设置事务隔离级别(5种)
未提交读(read uncommited) :脏读不可重复读,幻读都有可能发生
已提交读 (read commited):避免脏读但是不可重复读和虚读有可能发生
可重复读 (repeatable read) :避免脏读和不鈳重复读.但是虚读有可能发生.