SQL中查询和事务的区别是什么?

8

我第一次学习SQL,我的老师说一个查询总是会返回某种信息,而一个事务将使数据被读取或放入数据库中。我感到困惑,因为为什么人们会说在SQL中INSERT是一个查询呢?能否请有经验的人解释一下给初学者听呢?


1
SQL中的“Q”代表“查询”:即使它不返回任何内容(例如“create table”查询),所有SQL都是“查询” - 寻找DDL,DML和DCL)。 所有查询都在事务内运行。 - Bohemian
3个回答

16

一个查询通常是指SELECT语句,但也可能指数据修改,如 UPDATE, INSERT, DELETE, 和 MERGE,这些是常见的 DML(“数据修改语言”)语句。个人而言,我会将这四个操作称为 DML 语句,并将 查询 保留给 SELECT 语句;我认为这是一个有用的区分。

数据库实现了一套称为 ACID 属性的属性集。它们基本上意味着任何 SQL 语句都可以看到一致的数据,无论数据库中正在发生什么。简单地说,所有操作都是串行化的 - 一个语句在另一个开始之前完成,即使在多用户环境中也是如此。串行化确保操作相互隔离。在实践中,串行化非常昂贵,因此数据库具有其他机制来确保完整性,但它在学习概念时是一种有用的抽象。

什么是事务?事务是数据库用来确保在修改数据时数据完整性的机制。事务通常由一个修改数据的语句组成。但这并不是必需的。实际上,在单个事务内可以有复杂的数据转换。

事务的三个关键操作是:

  • 开始 - 事务开始时,系统会记住当前的时间戳和数据库状态。
  • 提交 - 如果事务成功完成,则将更改保存到数据库中,以便其他用户可以看到这些更改。如果事务失败,则撤消所有更改。
  • 回滚 - 如果事务失败,则还原所有更改并将数据库恢复到其在事务开始之前的状态。
  • BEGIN TRANSACTION:告知数据库事务即将开始。在事务“活动”期间,所有更改都对其他用户不可见。
  • COMMIT TRANSACTION:使所有更改在数据库中可见。从概念上讲,这是瞬间发生的。数据库保证其他用户不会看到数据的部分更改(即执行数据完整性)。
  • ROLLBACK TRANSACTION:撤消所有操作。没有其他用户能够看到更改。
  • 注意:许多数据库有降低数据完整性的选项。对于那些知道自己在做什么的用户来说,这些选项可能很有用。

    值得一提的是,如果数据库中的所有操作都是 SELECT 语句,则不需要事务。数据不会发生变化,因此数据的视图是一致的。因此,通常情况下,事务与 DML 语句相关联。


    3

    简单来说,查询(Query)是一条指令,如SELECT、UPDATE、DELETE等,而事务(Transaction)是一组查询,用于执行特定任务

    • 在资金交易操作中,我们需要执行多个任务,例如选择账户验证余额扣除余额存入余额,因此这4个查询可以组合在一起形成一个事务。

    我猜你想说的是,当我们同时更新多个表时,应该使用事务来保证数据一致性,而UPDATE、DELETE只是更新单个表,所以它们不是一个事务。 - Viraj Singh

    2

    在使用SQL数据库时,你会遇到事务和查询。以下是一个简单的解释:

    • 查询是对表中数据进行CRUD(创建(插入),更新(设置),读取(选择),删除(删除))操作的过程。
    • 事务是一个或多个语句/查询/操作执行的过程。

    这意味着一个事务包含了一些交互,而查询是其中一种交互的示例。需要知道的重要信息是,事务就像在线购物一样。你可以操作并标记想要购买的物品,但只有当你点击“购买”按钮后,你才会最终获得并支付商品。对于事务来说,这意味着它们需要在之后提交,否则它们将被撤销(回滚)。通常情况下,你的框架会在每次交互后自动提交更改并结束事务。

    如果你有更多问题,请留言。


    那么事务只是确保查询按预期工作,不会对数据库做出错误操作吗?事务本身算作一个查询吗?@LemglBoy - whitenysherman

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接