首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第4章 数据更新
4-1 数据的插入(INSERT语句的使用方法)
什么是INSERT
INSERT语句的基本语法
列清单的省略
插入NULL
插入默认值
从其他表中复制数据
4-2 数据的删除(DELETE语句的使用方法)
DROP TABLE语句和DELETE语句
DELETE语句的基本语法
指定删除对象的DELETE语句(搜索型DELETE)
4-3 数据的更新(UPDATE语句的使用方法)
UPDATE语句的基本语法
指定条件的UPDATE语句(搜索型UPDATE)
使用NULL进行更新
多列更新
4-4 事务
什么是事务
创建事务
ACID特性
第5章 复杂查询
5-1 视图
视图和表
创建视图的方法
视图的限制① ——定义视图时不能使用ORDER BY子句
视图的限制② ——对视图进行更新
删除视图
5-2 子查询
子查询和视图
子查询的名称
标量子查询
标量子查询的书写位置
使用标量子查询时的注意事项
5-3 关联子查询
普通的子查询和关联子查询的区别
关联子查询也是用来对集合进行切分的
结合条件一定要写在子查询中
第6章 函数、谓词、CASE表达式
6-1 各种各样的函数
函数的种类
算术函数
字符串函数
日期函数
转换函数
6-2 谓词
什么是谓词
LIKE谓词——字符串的部分一致查询
BETWEEN谓词——范围查询
IS NULL、IS NOT NULL——判断是否为NULL
IN谓词——OR的简便用法
使用子查询作为IN谓词的参数
EXIST谓词
6-3 CASE表达式
什么是CASE表达式
CASE表达式的语法
CASE表达式的使用方法
第7章 集合运算
7-1 表的加减法
什么是集合运算
表的加法——UNION
集合运算的注意事项
包含重复行的集合运算——ALL选项
选取表中公共部分——INTERSECT
记录的减法——EXCEPT
7-2 联结(以列为单位对表进行联结)
什么是联结
内联结——INNER JOIN
外联结——OUTER JOIN
3张以上的表的联结
交叉联结——CROSS JOIN
联结的特定语法和过时语法
当前位置:
首页>>
技术小册>>
SQL基础教程(中)
小册名称:SQL基础教程(中)
### 创建事务 在数据库管理系统中,事务(Transaction)是一个不可分割的工作单元,它包含了一系列对数据库中数据的操作,这些操作要么全部成功执行,要么在遇到错误时全部撤销,以保证数据库数据的一致性和完整性。掌握如何创建和管理事务,是数据库开发人员和管理员必备的技能之一。本章将深入讲解SQL中事务的基本概念、特性、创建方法以及事务的控制语句,并通过实例展示如何在不同数据库系统中应用事务。 #### 一、事务的基本概念 **1.1 定义** 事务是数据库管理系统执行过程中的一个逻辑单位,由一个或多个SQL语句组成,这些语句作为一个整体一起向系统提交,要么完全执行,要么完全不执行。事务是数据库并发控制的基本单位,也是恢复和并发控制的基本单位。 **1.2 特性(ACID)** 事务具有四个基本特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),简称ACID。 - **原子性**:事务中的所有操作要么全部完成,要么全部不完成,事务在执行过程中发生错误会被回滚(Rollback)到事务开始前的状态,就像这个事务从未执行过一样。 - **一致性**:事务必须使数据库从一个一致性状态变换到另一个一致性状态。一致性确保了数据库的完整性和业务规则的正确性。 - **隔离性**:数据库系统提供一定的隔离级别,使并发执行的事务之间不会相互干扰,一个事务的执行不能被其他事务干扰。 - **持久性**:一旦事务被提交,它对数据库的改变就是永久性的,即使系统发生故障也不会丢失。 #### 二、事务的创建 在SQL中,事务的创建和管理主要通过控制语句来实现,包括`BEGIN TRANSACTION`(或简写为`BEGIN`)、`COMMIT`、`ROLLBACK`等。 **2.1 BEGIN TRANSACTION/BEGIN** 这个语句用于标记一个事务的开始。在大多数数据库系统中,执行了这条语句之后,后续的SQL操作就被视为一个事务的一部分,直到遇到`COMMIT`或`ROLLBACK`语句为止。 **示例**: ```sql BEGIN TRANSACTION; -- 接下来的SQL语句都属于这个事务 ``` 在某些数据库系统中,如SQL Server,可以简写为`BEGIN;`。 **2.2 COMMIT** `COMMIT`语句用于提交事务,即将事务中所有对数据库的修改永久保存到数据库中。一旦执行了`COMMIT`,就不能再对该事务进行回滚。 **示例**: ```sql BEGIN TRANSACTION; -- 执行一系列SQL语句 COMMIT; -- 提交事务 ``` **2.3 ROLLBACK** `ROLLBACK`语句用于回滚事务,即撤销事务中所有对数据库的修改,使数据库回到事务开始前的状态。这通常用于在事务执行过程中遇到错误时,防止错误的数据被保存到数据库中。 **示例**: ```sql BEGIN TRANSACTION; -- 执行一系列SQL语句 -- 假设这里发现某个操作是错误的 ROLLBACK; -- 回滚事务 ``` #### 三、事务的控制 在并发环境下,为了保证事务的隔离性和一致性,数据库系统提供了多种事务隔离级别。通过调整隔离级别,可以在一定程度上平衡数据的一致性和系统的并发性。 **3.1 隔离级别** SQL标准定义了四种隔离级别,从低到高依次为: - **READ UNCOMMITTED**:最低的隔离级别,允许读取尚未提交的数据,可能导致脏读(Dirty Read)。 - **READ COMMITTED**:允许在事务处理过程中,多次读取同一数据集合时,该数据集合中间可能有的其他事务已经提交的更新。这可以避免脏读,但可能出现不可重复读(Non-repeatable Read)和幻读(Phantom Read)。 - **REPEATABLE READ**:保证在同一个事务中多次读取同样记录的结果是一致的。可以避免脏读和不可重复读,但可能出现幻读。 - **SERIALIZABLE**:最高的隔离级别,通过强制事务串行执行,来避免脏读、不可重复读和幻读。但会降低并发性能。 **3.2 设置隔离级别** 不同的数据库系统提供了不同的语法来设置事务的隔离级别。 **SQL Server 示例**: ```sql SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN TRANSACTION; -- 执行事务操作 COMMIT; ``` **MySQL 示例**(MySQL 8.0之前版本): ```sql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; START TRANSACTION; -- 执行事务操作 COMMIT; ``` (注意:MySQL 8.0及以后版本使用`SET TRANSACTION`语句) **PostgreSQL 示例**: ```sql BEGIN; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- 执行事务操作 COMMIT; ``` #### 四、事务的应用场景 事务在数据库操作中有着广泛的应用场景,包括但不限于: - **金融交易**:如银行转账,需要确保从一个账户扣款和向另一个账户存款的操作要么同时成功,要么同时失败。 - **数据迁移**:在将大量数据从一个数据库迁移到另一个数据库时,需要确保迁移过程中的数据完整性和一致性。 - **订单处理**:在电子商务系统中,处理用户订单时,需要同时更新库存信息和订单信息,这两个操作必须作为一个整体来执行。 #### 五、注意事项 - **避免长事务**:长事务会占用大量系统资源,影响系统的并发性能,并增加死锁的风险。 - **合理设置隔离级别**:根据实际需求选择合适的隔离级别,以平衡数据的一致性和系统的并发性。 - **错误处理**:在事务执行过程中,应添加适当的错误处理逻辑,以便在发生错误时能够正确地回滚事务。 - **日志记录**:对于重要的数据库操作,应记录详细的操作日志,以便在出现问题时进行追踪和恢复。 #### 六、总结 事务是数据库管理中一个非常重要的概念,它保证了数据库数据的一致性和完整性。通过本章的学习,我们了解了事务的基本概念、特性、创建方法以及事务的控制语句,并掌握了如何在不同数据库系统中应用事务。在实际的开发和维护工作中,合理利用事务,可以大大提高数据库操作的可靠性和安全性。
上一篇:
什么是事务
下一篇:
ACID特性
该分类下的相关小册推荐:
PostgreSQL入门教程
SQL基础教程(上)
SQL基础教程(下)
高性能的Postgres SQL