数据库事务
一、概念
数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
二、四大特性
事务的ACID特性是由关系数据库系统(DBMS)来实现的,DBMS采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所作的更新,如果某个事务在执行过程中发生错误,就可以根据日志撤销事务对数据库已做的更新,使得数据库回滚到执行事务前的初始状态。
1、原子性
事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
2、一致性
几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。
3、隔离性
事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性
对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障,除非有另外一个事务 改变或者开启之前保存的状态。
三、事务的开启与关闭
start transaction; 事务开始
commit;提交 结束事务。
rollback; 回滚 从开始到 对数据库所作的修改 回复到修改前的状态
四、四大隔离级别
五、隔离级别的修改
在mysql中查询隔离级别:select @@tx_isolation;
修改隔离级别:set transaction isolation level repeatable read;或:set tx_isolation=‘repeatable-read’;
设置数据库的隔离级别一定要是在开启事务之前;
如果是使用JDBC对数据库的事务设置隔离级别的话,也应该是在调用Connection对象的setAutoCommit(false)方法之前。
隔离级别的设置只对当前链接有效。对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口中的事务有效;对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于Connection对象设置的隔离级别只对该Connection对象有效,与其他链接Connection对象无关。
在JDBC中设置隔离级别的部分代码:
六、隔离级别不同会出现的问题