【SQL 必知必会】- 第二十课 管理事务处理

目录

写在前面

20.1 事务处理

        可以回退哪些语句?

20.2 控制事务处理

        20.2.1 使用ROLLBACK

        20.2.2 使用COMMIT

        20.2.3 使用保留点

        保留点越多越好


        这一课介绍什么是事务处理,如何利用 COMMIT 和 ROLLBACK 语句管理事务处理。

写在前面

        事务是非常重要的一个概念,在工作中,几乎处处都能见到它的身影,对于保持数据的一致性起到了至关重要的作用,一定要对事务有非常深刻的了解,并学会应用,这会使你受益颇深。否则因为不是一个事务而导致出现的各种问题,会让你体会到什么叫做真正的痛苦,对于稍微大点的公司而言,几百上千张表是非常寻常的事情。


20.1 事务处理

        使用事务处理(transaction processing),通过确保成批的 SQL 操作要么完全执行,要么完全不执行,来维护数据库的完整性。

        正如第12 课所述,关系数据库把数据存储在多个表中,使数据更容易操纵、维护和重用。不用深究如何以及为什么进行关系数据库设计,在某种程度上说,设计良好的数据库模式都是关联的。

        现在需要对很多个表先后进行插入 / 删除 / 更新 操作,现在假设由于某种数据库故障(如超出磁盘空间、安全限制、表锁等),这个过程无法完成。数据库中的数据会出现什么情况?

        会导致其中的某些语句执行成功,但是后面的语句因为中间一句的错误,没有执行成功,那么数据应该怎么操作就是个大问题,甚至都不知道是哪里出现了问题。

        如何解决这种问题?这就需要使用事务处理了。事务处理是一种机制,用来管理必须成批执行的SQL 操作,保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们要么完全执行,要么完全不执行(除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表;如果发生错误,则进行回退(撤销),将数据库恢复到某个已知且安全的状态。

        在使用事务处理时,有几个反复出现的关键词。下面是关于事务处理需要知道的几个术语:

  • 事务(transaction)指一组 SQL 语句;
  • 回退(rollback)指撤销指定 SQL 语句的过程;
  • 提交(commit)指将未存储的 SQL 语句结果写入数据库表;
  • 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),可以对它发布回退(与回退整个事务处理不同)。

        可以回退哪些语句?

        事务处理用来管理 INSERT、UPDATE 和 DELETE 语句。不能回退 SELECT语句(回退SELECT 语句也没有必要),也不能回退 CREATE 或 DROP 操作。事务处理中可以使用这些语句,但进行回退时,这些操作也不撤销。


20.2 控制事务处理

        管理事务的关键在于将 SQL 语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。

        Oracle 使用的语法:

SET TRANSACTION
...

        oracle 还可以使用这种操作实现事务:

begin
    语句一;
    语句二;
    ......
    语句三;
end;

        多数实现没有明确标识事务处理在何处结束。事务一直存在,直到被中断。通常,COMMITT 用于保存更改,ROLLBACK 用于撤销,详述如下。


        20.2.1 使用ROLLBACK

        ROLLBACK 命令用来回退(撤销)SQL 语句。

DELETE FROM Orders;
ROLLBACK;

        在此例子中,执行 DELETE 操作,然后用 ROLLBACK 语句撤销。


        20.2.2 使用COMMIT

        一般的SQL 语句都是针对数据库表直接执行和编写的。这就是所谓的隐式提交(implicit commit),即提交(写或保存)操作是自动进行的。

        在事务处理块中,提交不会隐式进行。不过,不同DBMS 的做法有所不同。有的DBMS 按隐式提交处理事务端,有的则不这样。

        进行明确的提交,使用COMMIT 语句。

SET TRANSACTION
DELETE OrderItems WHERE order_num = 12345;
DELETE Orders WHERE order_num = 12345;
COMMIT;

        20.2.3 使用保留点

        使用简单的 ROLLBACK 和 COMMIT 语句,就可以写入或撤销整个事务。但是,只对简单的事务才能这样做,复杂的事务可能需要部分提交或回退。

        要支持回退部分事务,必须在事务处理块中的合适位置放置占位符。这样,如果需要回退,可以回退到某个占位符。

        在 SQL 中,这些占位符称为保留点。在 MariaDB、MySQL 和Oracle 中创建占位符,可使用 SAVEPOINT 语句。

SAVEPOINT delete1;

        工作中其实并没有经常用到,可能是工作性质导致的。


        保留点越多越好

        可以在 SQL 代码中设置任意多的保留点,越多越好。为什么呢?因为保留点越多,你就越能灵活地进行回退。

        使用保留点的好处:

        在大批量的 SQL 执行的过程中,如果后续出现错误,导致 SQL执行失败,若没有保留点,则需要从头执行,比较耗时。而有保留点,则可以使得执行的 SQL语句个数减少,从而减少时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《SQL》是一本非常经典的SQL入门书籍,适合初学者快速掌握SQL语言的基本识和技巧。本书主要分为四个部分:基础部分、检索部分、排序和分组以及高级数据操作。基础部分介绍了SQL的起源、数据库的类型、表的创建和插入数据等基本概念和操作。检索部分则详细讲解了如何使用SELECT语句来查询数据库中的数据,包括使用WHERE子句进行条件查询、使用AND和OR操作符进行多条件查询等常用技巧。排序和分组部分则介绍了如何对查询结果进行排序和分组处理,以及使用聚合函数计算汇总数据等内容。最后一个部分是高级数据操作,介绍了如何连接多个表、使用子查询进行嵌套查询、使用视图进行数据访问等高级技巧。在每个章节的最后都包含了习题和实例,可以帮助读者巩固所学识。 这本书以简明易懂的语言,结合大量的实例和图表,帮助读者从零开始学习SQL语言。即使没有编程经验的读者也能够轻松理解和掌握其中的识。《SQL》还提供了一个完整的SQL语法参考手册,方便读者在实践中查找和使用各种SQL语句和函数。 总的来说,《SQL》是一本对于学习SQL语言非常有帮助的入门书籍。无论是想要进一步学习数据库开发,还是需要使用SQL语言进行数据分析,都可以从这本书中得到很多有用的识和技巧。 ### 回答2: 《SQL》是一本非常经典且实用的SQL入门教材。该书的主要目的是帮助初学者快速入门SQL语言,掌握SQL查询语言的基本识和技巧。为了回答这个问题,我将从以下几个方面进行说明。 首先,该书在内容上涵盖了SQL的基础识和常用操作。从数据的组织结构、关系型数据库的概念,到SQL语言的基本语法、数据查询、更新、删除和插入等操作,都有详细的介绍和示例。这样有助于读者快速掌握SQL的基本概念和常用操作。 其次,《SQL》以简单明了的语言和生动形象的案例讲解了SQL查询的各种方法和技巧。通过大量的实例,读者可以了解如何进行条件查询、多表查询、排序、分组、连接等操作,从而更好地理解SQL的语法和应用场景。 此外,该书还介绍了一些高级的SQL语句和技巧,如子查询、视图、事务、索引等。这些内容对于进一步提高SQL查询效率和优化数据库操作非常有帮助。 总的来说,《SQL》是一本非常适合初学者入门的SQL教材。它的内容涵盖了SQL的基础识、常用操作和一些高级技巧。通过阅读这本书,读者可以快速了解SQL语言,并能够进行简单的查询和数据操作。不仅如此,这本书还以简单明了的语言和丰富的实例,帮助读者更好地理解和应用SQL语言。无论是想从事数据库开发、数据分析还是数据库管理员等相关职业的人,都可以通过阅读《SQL》来快速入门SQL,掌握备的数据查询和操作技能。 ### 回答3: 《SQL》是由Ben Forta编写的一本经典的SQL入门教程。这本书以简单易懂的方式介绍了SQL语言的基本概念和常用操作,适合初学者和想要提升SQL技能的人阅读。 本书首先介绍了SQL的起源和概念,然后详细讲解了SQL的各种基本语句,包括创建表、插入数据、查询数据和更新数据等。书中通过大量的实例和图表,帮助读者理解和掌握SQL语句的用法和逻辑。 《SQL》不仅介绍了简单的查询语句,还深入介绍了复杂的SQL查询和数据连接操作,例如多表查询、子查询、联合查询和数据排序等。此外,书中还介绍了SQL的数据过滤、数据修改和数据删除等操作,帮助读者实现对数据库的灵活操作。 此外,《SQL》还介绍了SQL函数的使用和常见的数据类型,如日期、字符串和数字等。通过学习这些识,读者可以更好地理解和操作数据库。书中还介绍了常见的数据库管理系统,如MySQL、Oracle和SQL Server,并讲解了它们之间的差异和特点。 总的来说,《SQL》是一本很好的SQL入门教材。它的编写方式简单易懂,且内容详实全面,能够帮助读者快速理解和掌握SQL语言的基本概念和操作技巧。无论是初学者还是有一定SQL基础的读者,都能够从中受益匪浅。如果你希望提升你的SQL技能,这本书是一个很好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值