回忆是一座桥
却是通往寂寞的牢

SQL语法 - 事务控制概述

在数据库管理系统中,事务(Transaction)是一个非常重要的概念。事务是一组操作的序列,这些操作要么全部执行成功,要么全部不执行,以确保数据的完整性和一致性。

事务具有四个特性,通常称为ACID特性:

  • 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不存在中间状态。
  • 一致性(Consistency):事务执行前后,数据库必须从一个一致状态转移到另一个一致状态。
  • 隔离性(Isolation):并发执行的事务之间不能相互干扰。
  • 持久性(Durability):一旦事务提交,其结果就是永久性的,即使系统故障也不会丢失。

标准SQL定义了以下事务控制命令:

  • BEGIN TRANSACTION:开始一个新的事务。

  • COMMIT:提交当前事务,使所有更改永久生效。

  • ROLLBACK:回滚当前事务,撤销所有未提交的更改。

  • SAVEPOINT:设置一个保存点,可以在事务中回滚到该点。

  • ROLLBACK TO SAVEPOINT:回滚到指定的保存点。

  • RELEASE SAVEPOINT:释放指定的保存点。

以下是一个包含事务控制的SQL案例:

-- 开启一个事务
BEGIN TRANSACTION;

-- 执行一些DML操作
INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2');
UPDATE table2 SET column3 = 'value3' WHERE condition;
...

-- 设置保存点
SAVEPOINT my_savepoint; 

-- 继续执行更多DML操作
INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2');
UPDATE table2 SET column3 = 'value3' WHERE condition;
...

-- 回滚到保存点,撤销保存点之后进行的操作
ROLLBACK TO SAVEPOINT my_savepoint; 

-- 提交事务,从保存点到提交点的操作将被保存
COMMIT; 

在不同的数据库实现中,可能会对事务控制的命令进行一定的扩展, 因此具体的命令可能会有所不同,使用时需要查阅对应的文档。


下面给出MySQL和SQL Server的事务控制命令的示例。

1、MySQL中的事务控制

MySQL通过InnoDB存储引擎支持事务。以下是MySQL中使用事务控制命令的示例:

-- 开启一个事务
START TRANSACTION;

-- 执行一些DML操作
INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2');
UPDATE table2 SET column3 = 'value3' WHERE condition;
...

-- 设置保存点
SAVEPOINT my_savepoint; 

-- 继续执行更多DML操作
INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2');
UPDATE table2 SET column3 = 'value3' WHERE condition;
...

-- 回滚到保存点,撤销保存点之后进行的操作
ROLLBACK TO SAVEPOINT my_savepoint; 

-- 提交事务,从保存点到提交点的操作将被保存
COMMIT; -- 或者 ROLLBACK;

MySQL还支持自动提交模式,即每条SQL语句默认都是一个独立的事务。可以通过以下命令设置自动提交模式:

SET autocommit = 0; -- 关闭自动提交
SET autocommit = 1; -- 开启自动提交

2、SQL Server中的事务控制

SQL Server同样支持事务控制,以下是SQL Server中使用事务控制命令的示例:

-- 开启一个事务
BEGIN TRANSACTION;

-- 执行一些DML操作
INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2');
UPDATE table2 SET column3 = 'value3' WHERE condition;
...

-- 设置保存点
SAVE TRANSACTION my_savepoint; 

-- 继续执行更多DML操作
INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2');
UPDATE table2 SET column3 = 'value3' WHERE condition;
...

-- 回滚到保存点,撤销保存点之后进行的操作
ROLLBACK TRANSACTION my_savepoint; 

-- 提交事务,从保存点到提交点的操作将被保存
COMMIT TRANSACTION; -- 或者 ROLLBACK TRANSACTION;
未经允许不得转载:夕枫 » SQL语法 - 事务控制概述
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论