首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL触发器是否按顺序运行?

SQL触发器是否按顺序运行?
EN

Stack Overflow用户
提问于 2016-03-02 19:01:45
回答 1查看 2K关注 0票数 0

好的,我从很长一段时间以来就一直在研究SQL,并且编写了各种各样的复杂查询。但不知何故,我无法理解与几件事相关的基本概念。

我的问题是:

  1. SQL查询是否并行运行?(我认为它们不会,因为您不能让两个查询同时更改同一表中的数据,对吗?你不能这样确保主键或自动增量或唯一索引,对吗?)
  2. 触发器是如何工作的?我最近写了一个触发器来防止mysql医生的双重预约。这是一个预插入触发器。它所做的是,检查表中的所有条目,并查看是否已经在同一日期、同一时间预订了同一位医生。对于找到的每一行,它都会增加一个初始化为0的变量。如果在while循环结束时,此变量的值大于零,则取消查询(由Laravel处理)。否则,我允许成功地完成查询。我的问题是,如果两个人同时按下按钮,触发器是否会并行运行?没有,对吧?

希望能找到简单准确的答案。互联网上的文章总是太令人困惑了。

EN

回答 1

Stack Overflow用户

发布于 2016-03-02 19:11:25

SQL代码(包括触发器中的代码)可以并行运行。然而,SQL使用锁来确保事务是原子的,并且使用一致的数据。如果两个update语句试图更新同一行数据,那么其中一个将首先获得该行上的锁--防止另一个事务暂时更新它。一旦完成,它将释放锁,然后第二个更新将被允许继续进行。如果需要让所有语句都保持为原子的,还可以有一个跨多个语句的事务。对于SELECT语句,它们通常可以忽略锁(取决于锁类型),因为它们只是在检索数据。两个SELECT语句不会互相踩在一起。

如果两个人同时按下你的理论按钮,其中一个将是“第一”,他们的交易将首先通过。也就是说,在这里使用触发器听起来是个很糟糕的主意,海事组织。如果医生从来不允许双倍预订,那么使用声明式RI来强制执行--而不是触发器(这会导致额外的、通常也是很大的开销)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35755895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档