SQL基础:SQL Server中的事务介绍

1、什么是事务?

事务是指一个或多个数据库操作组成的逻辑工作单元,这些操作要么全做,要么全不做,是一种确保数据完整性与一致性的机制。在 SQL Server 中,事务是一个不可分割的操作序列,要么全部成功提交,要么全部失败回滚。

在事务中可能出现的问题有:

并发访问冲突,可能会导致脏读、不可重复读、幻读等问题;

异常中断后未提交的事务,可能会导致操作不完整。

出于上述问题的考虑,我们需要使用 SQL Server 的事务功能。

2、SQL Server 事务的特点

2.1 原子性(Atomicity)

原子性是指事务是一个不可分割的工作单元,要么全部执行,要么全部不执行。如果其中任何一条命令执行失败,整个事务都将会回滚(Rollback)。

BEGIN TRANSACTION; --开始事务

--INSERT, UPDATE, SELECT, DELETE 操作

COMMIT TRANSACTION; --提交事务

2.2 一致性(Consistency)

一致性是指事务执行前后数据库必须处于一致状态。在SQL Server中,一致性是由约束(Constraints)、默认值(Default Values)、触发器(Triggers)等配置项保证的。

2.3 隔离性(Isolation)

隔离性是指一个事务的执行不应该受其他事务的干扰,在 SQL Server 中,事务的隔离级别可以设置,包括未提交读取(Read Uncommitted)、已提交读取(Read Committed)、可重复读取(Repeatable Read)和序列化(Serialization)四种级别。不同的隔离级别,会对并发访问产生不同的问题。

2.4 持久性(Durability)

持久性是指事务提交后,数据库变更会持久保存。即使发生宕机等故障,恢复后也能保证数据的一致性。

3、SQL Server 事务的提交与回滚

在 SQL Server 中,事务的提交和回滚是通过 COMMIT 和 ROLLBACK 语句实现的。在事务完成后,必须显式地提交或回滚事务,并且一旦提交或回滚就不能撤销。

3.1 事务的提交

提交(Commit)语句会使事务中的所有操作生效,并且释放所有锁定的资源。

BEGIN TRANSACTION;

--INSERT, UPDATE, SELECT, DELETE 操作

COMMIT TRANSACTION;

3.2 事务的回滚

回滚(Rollback)会使事务中的操作全部撤销,并且回滚到事务开始前的状态。

BEGIN TRANSACTION;

--INSERT, UPDATE, SELECT, DELETE 操作

ROLLBACK TRANSACTION;

3.3 事务的保存点

保存点(Savepoint)是指在事务中创建的中间提交点,在该点之前的操作可以被提交,而在该点之后的操作可以被回滚。

BEGIN TRANSACTION;

--INSERT, UPDATE, SELECT, DELETE 操作

SAVE TRANSACTION save_point1; --创建一个保存点

--INSERT, UPDATE, SELECT, DELETE 操作

ROLLBACK TRANSACTION save_point1; --回滚至保存点

COMMIT TRANSACTION;

4、SQL Server 事务的实例

下面是一个简单的实例,我们以一个银行账户转账的例子来演示事务的使用。

--定义 Bank_Account 表

CREATE TABLE Bank_Account

(

Account_ID INT PRIMARY KEY,

Balance DECIMAL(10, 2)

);

--插入测试数据

INSERT INTO Bank_Account VALUES (10000, 1000), (20000, 500);

--转账操作,从账户 10000 中转出 500 元至账户 20000 中

BEGIN TRANSACTION; --开始事务

UPDATE Bank_Account SET Balance = Balance - 500 WHERE Account_ID = 10000;

UPDATE Bank_Account SET Balance = Balance + 500 WHERE Account_ID = 20000;

COMMIT TRANSACTION; --提交事务

参考文献:

《SQL Server 事务处理 》

《SQL Server 事务》

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签