张胜
摘要:数据库中的事务处理是数据库教学的重点内容,该文结合SQL Server数据库对 其特性,执行,编写规则等做了概括论述,并结合教学实践,对相关注意事项做了简要说明,这对于如何学好该知识点具备一定指导意义。
关键词:SQL SERVER; 事务; 锁
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)30-7017-02
事务的作用是保证一系列的数据操作可以全部正确完成,不会造成数据操作到中途未完成而导致数据完整性出错,锁的作用是保证数据在操作过程中不会受到任何其他影响,事务和锁都是数据库中的重要功能,这里将结合SQL SERVER数据库谈谈事务处理部分内容。
1 事务的特性
事务是作为单个逻辑工作单元执行的一系列工作有下列四个属性:
原子性:事务必须是原子性的工作单元,对事务里的操作,要么全都执行,要么全不执行。
一致性:事务完成时,必须使所有数据都保持一致状态,所有规则都必须应用于事务的修改。
隔离性:由并发事务所做的修改必须与其他并发事务所做的修改隔离,事务在开始时就会识别数据所处的状态,以便发生错误时回滚操作,所以另一个并发事务要么修改它之前的状态,要么修改他之后的状态,不能在该事物正在运行时去修改他的状态。
持久性:在事务完成后,其操作结果对于系统的影响应该是永久的。
2 执行事务的注意事项
1) 在每个操作之后,都要检查@@ERROR和@@ROWCOUNT的值。
因为@@ERROR只对当前操作有小,当进行第二个操作时,@@ERROR的值就会被第二个操作的值取代。@@ROWCOUNT的作用是判断该操作影响了多少条记录,当使用UPDATE或DELETE进行更新或删除操作时,若没有符合条件的记录,那么其所影响的记录数为0,但并不出错,所以@@ERROR的值也为0.因此,还要检查@@ROWCOUNT的值,以确定操作是否成功。
2) 当一个事务结束后,紧跟在事务之后的代码还可以继续执行,但出错后不能再回滚事务了。
3) 已经提交完毕的事务会将数据写入数据库,此时也不能回滚事务。
4) 在每个事务正在执行时,若发生断电等意外,则在下次重启系统后,该事务会自动回滚。
5) 无法回滚的语句不能在事务中使用,如:create database、alter database等。
3 事务的工作原理
事务在开始时,SQL SERVER就会将要修改的数据锁定,同时创建一个临时事务日志,在该日志里存放要更改的数据和更改的过程。事务未提交时,事务中所有数据操作是临时的,一旦发生数据操作失败,就是用临时日志去回滚事务操作,并解除锁定。在事务被成功提交后,数据库九江临时事务日志的内容存储到数据库中,此时事务操作完成。
4 事务执行的模式
显式事务:明确定义事务开始和结束的事务。
自动提交事务:这是SQL SERVER DATABASE ENGINE的默认事务方式,每一个T-SQL语句都可以看成一个自动提交事务。
隐式事务:当执行“SET IMPLICIT_TRANSACTIONS ON”语句后,SQL SERVER将会进入隐式事务模式,系统将在提交或回滚当前事务后自动启动新的事物,不需要再次定义事务的开始,隐式事务产生的是一个连续的事务序列。
5 编写事务的规则
1) 事务要尽可能简短
事务在启动后,DBMS会在事务结束前保留很多资源,以保证事务的ACID性质,若在事务里还要修改数据,数据管理系统还会使用锁来保护修改过的行,其他事务此时不能对这些行进行控制,直至事务结束,在多用户系统里,这种过大资源的占有和过长时间的锁定,是不可忍受的。
2) 在事务中访问的数据量要尽量少。
这也是基于事务会对数据加锁的理由。
3) 在事务处理期间尽量不要请求用户输入
在事务处理过程中,如果还要等待用户输入,事务占用的所有资源都会保留相当长时间,会造成阻塞。
6 事务的隔离级别
事务具有隔离性,在同一时间可以有多个事务处理数据,但每个数据在同一时刻只能有一个事务操作,将数据锁定可以防止其他事务影响当前事务操作的数据,但会影响数据库使用效率。甚至造成死锁。事务隔离级别是用来设置事务在读取数据时的隔离状态,从而提高数据并发使用效率的一种手段,SQL SERVER中事务隔离级别由低到高可分为5个级别。
Read Uncommitted:不隔离数据,即使在事务正在使用数据的同时,其他事务也能同时修改或删除该数据。Read Committed:不允许读取没有提交的数据,这是SQL SERVER的默认隔离级别,由于事务还没有提交,数据被修改的可能性还很大。REPEATABLE READ:在事务中锁定所读取的数据不让其他程序修改或删除,如此可以保证在事务中每次读取到的数据都一致,其他事务可以在该数据表中新增数据。Snapshot:快照隔离,可以为读取数据的事务提供所需数据的一个已提交版本,因此写入数据的事务不会阻塞读取数据的事务。Serializable:将事务所要用到的数据表全部锁定。
7 小结
本文总结了在SQL SERVER中事务处理的基本原理和使用注意事项,对于使用SQL SERVER进行数据库教学的教师具有一定的参考价值。
参考文献:
[1] 朱如龙. SQL Server2005数据库应用系统开发技术[M].北京:机械工业出版社,2006.
[2] 尹志宇. 数据库原理与应用教程[M]. 北京:清华大学出版社,2013.
[3] Ramez Eimasri. 数据库系统基础[M]. 北京:人民邮电出版社, 2009.endprint