# SQL事务 **Published by:** [Breezeandmoon](https://paragraph.com/@breezeandmoon/) **Published on:** 2024-02-05 **URL:** https://paragraph.com/@breezeandmoon/sql-3 ## Content 什么是 SQL 事务?SQL 事务定义了要针对数据库执行的工作单元,由一个或多个操作组成,可以按定义的顺序执行并保证完全成功或完全失败 - 这意味着所有操作要么一起成功,要么一起失败,并且没有中间过程状态是允许的。 让我们看一个交易示例:事务工作单元位于和语句中,并具有三个操作:BEGINCOMMIT询问TABLE_A插入TABLE_B更新TABLE_A如果由于某种原因步骤3中的更新失败,那么步骤2中的插入也会失败。所有操作都将作为一个单元成功或失败。交易管理可以使用三个 SQL 命令关键字来管理事务:BEGIN- 定义事务的开始。 a 之后和 a 之前的所有 SQL 命令将被视为单个工作单元BEGINCOMMITCOMMIT- 定义事务的结束。指定事务中的所有 SQL 命令应一起“提交”(即执行)ROLLBACK- 撤消自上次指定或命令以来执行的所有更新(即 DML)操作COMMITROLLBACKMVCC事务通过 MVCC(多版本并发控制)支持,这是一种控制并发访问的数据一致性的方法。换句话说,MVCC 是一种方法,多个用户可以同时操作相同的数据,而不会将该数据设置为任何一个用户不希望的值。 MVCC 实现了快照隔离,这可以确保并发事务始终看到所访问数据的一致快照。 当事务开始时,它将收到一致的数据快照,只有它可以读取和更新该数据。执行的任何更新都将根据其他并发事务进行检查;如果在同一数据条目上检测到另一个更新,则事务将失败。否则,只有当事务成功并提交时,更新才会变得可见。启用MVCC为了在表上启用事务支持,您必须打开快照隔离。这可以通过 DDL 命令中的标志来完成:ATOMICITYCREATE TABLE执行交易为了执行事务,您必须通过DML REST API 端点在单个 API 请求中提交完整的事务文本。事务必须格式正确,并包含开头的命令和结尾的命令。BEGINCOMMIT 例如,SQL 文本应如下所示: ## Publication Information - [Breezeandmoon](https://paragraph.com/@breezeandmoon/): Publication homepage - [All Posts](https://paragraph.com/@breezeandmoon/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@breezeandmoon): Subscribe to updates - [Twitter](https://twitter.com/OBM5D942LYocssN): Follow on Twitter