【问题标题】:MySQL trigger Error: 1442MySQL 触发器错误:1442
【发布时间】:2016-11-24 08:35:19
【问题描述】:

数据库:MySQL

使用:MySQL 工作台

我目前正在开展一个课程项目,我们必须设计一个机场网站,用户可以在该网站上登录/注册并购买提供的各种航班的机票。在该项目上工作了一段时间后,我意识到我的触发器不起作用。

我收到错误:Error Code: 1442. Can't update table 'reservation' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我在创建表单以供用户选择和购买门票之前尝试插入预订,从而偶然发现了此错误。我想知道是否有人可以查看我的数据库、插入命令的使用以及我的触发代码。任何帮助将不胜感激,因为我在数小时内试图解决这个问题。

插入命令:http://pastebin.com/tyBPWNDd

有问题的整个数据库和触发器:http://pastebin.com/BvUj1NdH

已解决:感谢所有帮助者,我能够确定我的问题是在 MySQL 不支持递归触发器时使用它们。我通过删除递归代码并让我的网站后端处理 current_date 集而不是触发器来解决我的问题。我将很快发布固定触发器。

【问题讨论】:

  • 触发器不能修改导致它被执行的表。您需要重新安排您的逻辑,以免发生这种情况。
  • @TimBiegeleisen 谢谢!你帮了大忙
  • 很高兴对你有用,但也许你应该评论一下你是如何解决问题的,这样这个问题可能对其他人更有帮助。
  • @timbiegeleisen 我刚刚在我的原始帖子中发布了一个已解决的部分。我也会很快发布更改后的 sql 触发器。再次感谢您的帮助。

标签: mysql sql database triggers


【解决方案1】:

是的,错误是不言自明的。您正在尝试创建 MySQL 不支持的递归触发器,如您发布的代码中所示

Create Trigger reservation_all
    after insert on Reservation
    for each row
    begin
        update Reservation

查看MySQL Documentation 以获取更多信息。引用自那

  • 存储的函数不能递归使用。

  • 存储函数或触发器无法修改已被调用 函数或触发器。

【讨论】:

  • 非常感谢!现在这很有意义,我不敢相信我错过了这样的事情。你对拉胡尔很有帮助。
猜你喜欢
  • 1970-01-01
  • 2017-08-12
  • 1970-01-01
  • 2019-11-15
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多