- SQL教程
- SQL - 主页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL数据库
- SQL-创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL-备份数据库
- SQL表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 更改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL查询
- SQL - 插入查询
- SQL - 选择查询
- SQL - 选择进入
- SQL - 插入选择
- SQL - 更新查询
- SQL - 删除查询
- SQL - 对结果进行排序
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL-Where 子句
- SQL - 顶部子句
- SQL - 不同子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL-Having 子句
- SQL - 与与或
- SQL - 布尔(位)运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY、ALL 运算符
- SQL - EXISTS 运算符
- SQL-案例
- SQL - NOT 运算符
- SQL - 不等于
- SQL - 为空
- SQL - 不为空
- SQL - 非空
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - 相交运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用联接
- SQL-内连接
- SQL-左连接
- SQL-右连接
- SQL-交叉连接
- SQL-全连接
- SQL-自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接与右连接
- SQL - 联合与连接
- SQL 键
- SQL - 唯一键
- SQL - 主键
- SQL-外键
- SQL - 复合键
- SQL - 备用键
- SQL索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL-唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级SQL
- SQL - 通配符
- SQL - 注释
- SQL-注入
- SQL-托管
- SQL - 最小值和最大值
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL-存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL-自动递增
- SQL - 日期和时间
- SQL-游标
- SQL - 公用表表达式
- SQL - 分组依据与排序依据
- SQL - IN 与 EXISTS
- SQL——数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数字函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL-JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问题与解答
- SQL - 快速指南
- SQL - 有用的函数
- SQL - 有用的资源
- SQL - 讨论
SQL - 事务
事务是在数据库上执行的工作单元或序列。事务以逻辑顺序完成,无论是由用户手动方式还是由某种数据库程序自动完成。
事务是对数据库的一个或多个更改的传播。例如,如果您正在创建、更新或删除表中的记录,那么您正在该表上执行事务。控制这些事务以确保数据完整性并处理数据库错误非常重要。
实际上,您会将许多 SQL 查询组合到一个组中,并将所有这些查询作为事务的一部分一起执行。
交易的属性
事务具有以下四个标准属性,通常由缩写词ACID指代。
Atomics性- 确保工作单元内的所有操作都成功完成。否则,事务将在故障点中止,并且之前的所有操作都将回滚到之前的状态。
一致性- 确保数据库在成功提交事务后正确更改状态。
隔离- 使事务能够独立运行且彼此透明。
持久性- 确保已提交事务的结果或效果在系统发生故障时仍然存在。
事务控制命令
事务控制命令仅与DML 命令一起使用,例如 INSERT、UPDATE 和 DELETE。创建表或删除表时不能使用它们,因为这些操作会自动提交到数据库中。以下命令用于控制事务。
COMMIT - 保存更改。
ROLLBACK - 回滚更改。
SAVEPOINT - 在事务组中创建要回滚的点。
SET TRANSACTION - 在事务上放置名称。
提交命令
COMMIT 命令是用于保存事务调用的更改的事务命令。它保存自上次 COMMIT 或 ROLLBACK 以来数据库上发生的所有事务。
COMMIT 命令的语法如下。
COMMIT;
例子
首先,让我们使用以下查询创建一个名为 CUSTOMERS 的表 -
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
我们正在将一些记录插入到上面创建的表中 -
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00), (2, 'Khilan', 25, 'Delhi', 1500.00), (3, 'Kaushik', 23, 'Kota', 2000.00), (4, 'Chaitali', 25, 'Mumbai', 6500.00), (5, 'Hardik', 27, 'Bhopal', 8500.00), (6, 'Komal', 22, 'Hyderabad', 4500.00), (7, 'Muffy', 24, 'Indore', 10000.00);
该表将创建如下 -
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
以下查询将从表中删除 AGE 为 25 的记录,然后在数据库中提交更改。
DELETE FROM CUSTOMERS WHERE AGE = 25; COMMIT;
确认
如果您使用 SELECT 语句验证 CUSTOMERS 表的内容,则表中的两行将被删除:
SELECT * FROM CUSTOMERS;
该表将显示如下 -
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
回滚命令
ROLLBACK 命令是用于撤消尚未保存到数据库的事务的事务命令。此命令只能撤消自上次 COMMIT 或 ROLLBACK 以来的事务。
ROLLBACK 命令的语法如下 -
ROLLBACK;
例子
考虑具有以下记录的 CUSTOMERS 表 -
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
以下查询将从表中删除 AGE 值为 25 的记录,然后回滚数据库中的更改。
DELETE FROM CUSTOMERS WHERE AGE = 25; ROLLBACK;
确认
删除操作不会影响表,并且 SELECT 语句将产生以下结果。
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
保存点命令
SAVEPOINT 是事务中的逻辑回滚点。
通常,当您执行 ROLLBACK 命令时,它会撤消更改,直到最后一次 COMMIT。但是,如果您创建保存点,您可以将事务部分回滚到这些点。您可以在两次提交之间创建多个保存点。
在事务中创建 SAVEPOINT 的语法如下所示。
SAVEPOINT savepoint_name;
然后,要回滚到创建的 SAVEPOINT,您可以使用以下语法 -
ROLLBACK TO savepoint_name;
例子
以下是您计划从 CUSTOMERS 表中删除三个不同记录的示例。您希望在每次删除之前创建一个 SAVEPOINT,以便您可以随时 ROLLBACK 到任何 SAVEPOINT,将相应的数据返回到其原始状态。
考虑具有以下记录的 CUSTOMERS 表。
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
以下代码块包含这一系列操作。
SAVEPOINT SP1; Query OK, 0 rows affected (0.00 sec) DELETE FROM CUSTOMERS WHERE ID=1; Query OK, 1 row affected (0.01 sec) SAVEPOINT SP2; Query OK, 0 rows affected (0.00 sec) DELETE FROM CUSTOMERS WHERE ID=2; Query OK, 0 rows affected (0.00 sec) SAVEPOINT SP3; Query OK, 0 rows affected (0.00 sec) DELETE FROM CUSTOMERS WHERE ID=3; Query OK, 1 row affected (0.01 sec)
现在已经进行了三个删除,让我们假设您改变了主意并决定回滚到您标识为 SP2 的保存点。因为 SP2 是在第一次删除后创建的,所以最后两次删除被撤消 -
ROLLBACK TO SP2;
确认
如果显示 CUSTOMERS 表,您会注意到自回滚到 SP2 以来仅发生了第一次删除。
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
2 | 基兰 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
RELEASE SAVEPOINT 命令
RELEASE SAVEPOINT 命令用于删除现有的 SAVEPOINT。
RELEASE SAVEPOINT 命令的语法如下。
RELEASE SAVEPOINT SAVEPOINT_NAME;
一旦 SAVEPOINT 被释放,您就不能再使用 ROLLBACK 命令来撤消自上次 SAVEPOINT 以来执行的事务。
SET TRANSACTION 命令
SET TRANSACTION 命令可用于启动数据库事务。该命令用于指定后续事务的特征。例如,您可以指定事务为只读或读写。
句法
SET TRANSACTION 命令的语法如下。
SET TRANSACTION [ READ WRITE | READ ONLY ];