21.5 事务处理
在实际工作中,对数据库的操作并不能保证完全不出错,一旦出错了,如何能保证数据的完整性和统一性呢?本节将引入一个新的概念:事务。事务跟数据库中数据完整性和统一性有什么联系?如何进行事务处理?本节通过详细的实例,来解决这方面的困扰。
21.5.1 什么是事务处理
事务是SQL中的单个逻辑工作单元,一个事务内的所有语句被作为整体执行,遇到错误时,可以回滚事务,取消事务所作的所有改变,从而可以保证数据库的一致性和可恢复性。
一个事务逻辑工作单元必须具有以下4种属性,如下所示:
❑原子性:一个事务必须作为一个原子单位,它所作的数据修改操作要不全部执行,要不全部取消。
❑一致性:当事务完成后,数据必须保证处于一致性的状态。
❑隔离性:一个事务所作的修改必须能够跟其他事务所作的修改分离开来,以免在并发处理时,发生数据错误。
❑永久性:事务完成后,它对数据库所作的修改应该被永久保持。
在实际工作中,有可能会出现一种情况:要向一个数据库中插入若干条记录,如果当插入一半数据时,突然系统出错了,那么数据库中已经有了这一半的数据。如果再重新插入,很有可能会引起数据库出错,此时,就需要使用事务的概念。在一个事务中允许数据库进行回滚操作,即让前面的插入工作全部作废,这样重新插入的时候就不会出错了。
数据库的所有操作都是建立在Connection连接类基础上的,事务管理也是在其上进行的,若要管理一个事务,可以在进行数据库操作动作之前,将数据库自动提交设为false,即con.setAutoCommit(false)。在数据库操作没有任何异常现象出现前提下,再将事务提交:con.commit(),在提交完毕后,要记住将事务管理的控制权还给数据库:con.setAutoCommit(true)。下一小节将举一个有关事务的实例。