2023-02-10 13:06:02
SQL中事务(TRANSACTION)的核心作用是维护数据库的完整性和一致性,通过将多个操作组合为逻辑单元,确保其执行结果符合“全有或全无”原则。事务的ACID特性(原子性、一致性、隔离性、持久性)是其可靠性的基石。
一、事务的基本操作流程事务通过以下步骤实现数据操作的完整性控制:
示例:
BEGIN TRANSACTION;UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 123;UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 456;COMMIT TRANSACTION;此例中,若任一UPDATE失败,整个事务将回滚,避免账户余额不一致。

事务的四大特性共同确保其可靠性:
原子性(Atomicity)
事务是不可分割的单元,所有操作要么全部成功,要么全部失败回滚。
类比:如同原子不可分割,事务的完整性不受部分操作影响。
一致性(Consistency)
事务将数据库从一个有效状态转换为另一个有效状态,遵守所有约束规则(如外键、唯一性)。
类比:会计记账需借贷平衡,违反规则的事务会被回滚。
隔离性(Isolation)
控制并发事务间的相互影响,确保每个事务感觉自己是唯一访问数据库的。
隔离级别(从低到高):
读未提交(Read Uncommitted):允许读取未提交数据,可能引发脏读、不可重复读、幻读。
读已提交(Read Committed):仅允许读取已提交数据,防止脏读,但可能不可重复读。
可重复读(Repeatable Read):确保同一事务内多次读取结果一致,防止脏读和不可重复读。
可串行化(Serializable):强制事务串行执行,完全隔离并发影响,但性能最低。
类比:多人编辑文档时,隔离性如同临时锁定机制,避免冲突。
持久性(Durability)
事务提交后,更改永久保存,即使系统故障也不丢失。
实现方式:通过事务日志写入磁盘(如WAL机制)。
类比:数据写入硬盘后,断电也不会丢失。

显式事务
通过BEGIN、COMMIT、ROLLBACK显式定义边界,适用于需要精确控制多个操作逻辑单元的场景(如金融转账)。
隐式事务
由数据库自动管理,每个SQL语句视为独立事务,执行成功自动提交,失败自动回滚。
适用场景:简单查询或单条操作,无需复杂控制。
嵌套事务
部分数据库支持在一个事务内启动另一个事务,但通常仅最外层事务的提交或回滚决定最终结果。
处理逻辑:内层事务的提交仅标记为可提交,需等待外层事务确认。

低隔离级别(如读未提交)提高并发性,但可能引发数据不一致问题。
高隔离级别(如可串行化)保证强一致性,但降低系统吞吐量。
总结:事务通过ACID特性为数据库操作提供可靠性保障,其隔离级别和类型选择需根据业务需求权衡并发性与一致性。显式事务适用于复杂逻辑,隐式事务简化单条操作,而嵌套事务则需结合具体数据库支持谨慎使用。