日期:2014-05-16 浏览次数:20514 次
数据库中的事务和锁
一、事务的ACID特性
1、A (Atomicity) 原子性
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
2、C (Consistency)一致性
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B树索引或双向链表)都必须是正确的。
3、I (Isolation) 隔离性
并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。
4、D (Durability) 持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
二、完整的事务
BEGIN a transaction: 设置事务的起始点
COMMIT a transaction: 提交事务,使事务提交的数据成为持久,不可更改的部分.
ROLLBACK a transaction:撤消一个事务,使之成为事务开始前的状态.
SAVE a transaction:建立一个标签,做为部分回滚时使用,使之恢复到标签初的状态.
事务的语法:
BEGIN TRAN[SACTION] [<transaction name>|<@transaction variable>][WITH MARK [’<description>’]][;]
COMMIT [TRAN[SACTION] [<transaction name>|<@transaction variable>]][;]
ROLLBACK TRAN[SACTION] [<transaction name>|<save point name>|<@transaction variable>|<@savepoint variable>][;]
SAVE TRAN[SACTION] [<save point name>| <@savepoint variable>][;]
事务完整的例子:
USE AdventureWorks2008; -- We’re making our own table - what DB doesn’t matter -- Create table to work with CREATE TABLE MyTranTest ( OrderID INT PRIMARY KEY IDENTITY ); -- Start the transaction BEGIN TRAN TranStart; -- Insert our first piece of data using default values. -- Consider this record No1. It is also the 1st record that stays -- after all the rollbacks are done. INSERT INTO MyTranTest DEFAULT VALUES; -- Create a "Bookmark" to come back to later if need be SAVE TRAN FirstPoint; -- Insert some more default data (this one will disappear -- after the rollback). -- Consider this record No2. INSERT INTO MyTranTest DE