首页
技术小册
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基础教程(中)
### ACID特性:数据库事务的基石 在数据库管理系统中,事务(Transaction)是执行过程中不可分割的逻辑单位,它确保了一系列操作要么全部完成,要么在遇到错误时全部撤销,从而维护数据库的完整性和一致性。ACID是数据库事务四个基本特性的缩写,分别代表原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这四个特性共同构成了数据库事务处理的基础框架,确保了数据处理的可靠性和稳定性。 #### 一、原子性(Atomicity) 原子性是指事务是数据库中最小的不可分割的工作单位。一个事务内的所有操作要么全部完成,要么全部不做,就像一个不可分割的原子一样。这意味着,在事务执行过程中,如果因为某些原因(如系统崩溃、资源不足等)导致事务未能成功完成,那么系统必须有能力将这些已经做出的修改全部撤销,使数据库回滚到事务开始之前的状态。 - **示例**:假设你正在银行系统中进行转账操作,从一个账户扣除一定金额并增加到另一个账户。这两个操作必须作为一个整体(即一个事务)来处理,要么全部成功,要么全部失败。如果仅完成了扣款而未成功转账,将导致资金损失。原子性确保了这种情况不会发生。 #### 二、一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态转换到另一个一致性状态。这里的“一致性”指的是数据库中的所有数据都满足所有的完整性约束条件,包括实体完整性、参照完整性和用户定义的完整性等。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。 - **示例**:考虑一个商品库存管理系统,每次销售商品后,库存数量应相应减少。如果因为某种原因(如程序错误),库存数量未减少或减少的数量不正确,这将导致数据库处于不一致状态。事务的一致性特性要求,无论事务成功还是失败,数据库必须保持其定义的完整性规则。 #### 三、隔离性(Isolation) 隔离性是指多个事务并发执行时,一个事务的执行不应被其他事务干扰。虽然多个事务可能同时操作数据库,但每个事务都应该感觉自己是在单独运行,以避免数据的不一致性和并发问题。数据库管理系统通过锁(Locking)和并发控制(Concurrency Control)机制来实现事务的隔离性。 - **隔离级别**:SQL标准定义了四种隔离级别,从低到高依次为:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别允许不同程度的并发,同时也对应着不同程度的数据不一致性风险。 - **读未提交**:最低级别的隔离,允许一个事务读取另一个事务未提交的修改。 - **读已提交**:保证一个事务不会读取到另一个事务未提交的修改,但可能遇到不可重复读的问题。 - **可重复读**:确保在同一个事务中多次读取同一数据的结果是一致的,但可能遇到幻读(Phantom Reads)问题。 - **串行化**:最高的隔离级别,通过强制事务串行执行来避免所有并发问题,但会显著降低系统性能。 #### 四、持久性(Durability) 持久性是指一旦事务被提交,它对数据库的修改就是永久性的,即使系统发生故障也不会丢失。为了确保持久性,数据库管理系统通常采用日志记录(Logging)和恢复技术(Recovery Techniques),将事务的修改信息记录在稳定的存储介质(如硬盘)上,以便在系统崩溃后能够恢复数据到最近一次一致的状态。 - **日志记录**:数据库系统通常使用两种日志:重做日志(Redo Logs)和撤销日志(Undo Logs)。重做日志记录了事务对数据库的修改,用于在系统故障后重放这些修改以恢复数据;撤销日志则记录了事务执行前的数据状态,用于在事务回滚时撤销所做的修改。 - **恢复技术**:当系统发生故障时,数据库管理系统会利用日志记录的信息来恢复数据。恢复过程可能包括重做(Redo)所有已提交事务的修改,以及撤销(Undo)所有未提交事务的修改,以确保数据库的完整性和一致性。 ### 总结 ACID特性是数据库事务处理的核心原则,它们共同确保了数据库操作的可靠性、一致性和稳定性。原子性确保了事务的不可分割性;一致性保证了数据库状态的正确性;隔离性防止了并发事务间的相互干扰;持久性则确保了事务修改的永久保存。理解和掌握ACID特性对于设计高效、可靠的数据库系统至关重要。在实际应用中,开发者需要根据具体需求选择合适的隔离级别,以平衡系统性能和数据一致性之间的需求。
上一篇:
创建事务
下一篇:
第5章 复杂查询
该分类下的相关小册推荐:
SQL基础教程(上)
高性能的Postgres SQL
SQL基础教程(下)
PostgreSQL入门教程