一、事务的作用:
事务管理对于企业级应用而言至关重要,它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性。就像银行的自动提款机ATM,通常ATM都可以正常为客户服务,但是也难免遇到操作过程中及其突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过ATM机一样,以保证用户和银行的利益都不受损失。
二、事务的四大特性:
特性 | 见解 |
---|---|
原子性(Atomicity) | 表示事务执行过程中的任何失败都将导致事务所做的任何修改失效,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 |
一致性(Consistency) | 表示一个事务执行之前和执行之后都必须处于一致性状态,当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。 |
隔离性(Isolation) | 表示当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 |
持久性(Durability) | 表示一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 |
总的说就是:要么全部执行成功,要么撤销不执行。
通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。
三、事务的隔离级别:
名称 | 级别 |
---|---|
None | JDBC驱动不支持事务 |
Read uncommitted (读未提交) | 允许脏读、不可重复读和幻读 |
Read committed (读已提交) | 禁止脏读,但允许不可重复读和幻读 |
Repeatable read (可重复读) | 禁止脏读和不可重复读,单运行幻读 |
Serializable (串行化) | 禁止脏读、不可重复读和幻读 |
后记:隔离级别的设置只对当前链接有效。对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口中的事务有效;对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于Connection对象设置的隔离级别只对该Connection对象有效,与其他链接Connection对象无关。