当前位置: 首页 > 面试题库 >

MySQL-插入后触发更新同一表

谭昱
2023-03-14
问题内容

这是我想做的事情:

INSERT表中有新记录时ACCOUNTS,我需要通过设置以表示特定(旧)帐户已被编辑来更新ACCOUNTSwhere
pk=中的行。NEW.edit_on``status='E'

DELIMITER $$

DROP TRIGGER IF EXISTS `setEditStatus`$$
CREATE TRIGGER `setEditStatus` AFTER INSERT on ACCOUNTS
FOR EACH ROW BEGIN
    update ACCOUNTS set status='E' where ACCOUNTS.pk = NEW.edit_on ;
END$$

DELIMITER ;

要求 不是 我要操纵 新插入的 列,而是要使用一个 已经存在的pk = NEW.edit_on

但是,我无法更新同一张表: Can't update table ACCOUNTS ... already used by the statement that invoked this trigger

请提出解决方法

PS:我已经走过了更新表触发器在同一个表更新后,插入到相同的表触发的mysql,更新与后同桌INSERT触发器和表后插入MySQL的触发器与插入和更新,但他们似乎没有给答案我的问题。

编辑

ACCOUNTS 表:

CREATE TABLE  `ACCOUNTS` (
  `pk` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(9) unsigned NOT NULL,
  `edit_on` bigint(10) unsigned DEFAULT NULL,
  `status` varchar(1) NOT NULL DEFAULT 'A',
  PRIMARY KEY (`pk`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=2147483726 DEFAULT CHARSET=latin1

问题答案:

似乎您无法在触发器中完成所有这些操作。根据文档:

在存储的函数或触发器中,不允许修改调用该函数或触发器的语句已经在使用(用于读取或写入)的表。

根据此答案,您似乎应该:

创建一个存储过程,该过程将插入/更新目标表,然后更新事务中的所有其他行。

使用存储的proc,您将手动提交更改(插入和更新)。我还没有在MySQL中做到这一点,但是这篇文章看起来像一个很好的例子。



 类似资料:
  • 以下是我想做的: 当表中有新的 时,我需要通过设置 ' 来更新中的行 = ,以表示特定(旧)帐户已被编辑。 要求不是操作新插入的列,而是使用< code>pk = NEW.edit_on操作已经存在的列 但是,我无法更新同一个表: 请建议一个解决方法 PS:我已经完成了更新同一表后在触发器中更新表、插入到同一表中触发器mysql、在同一表上用插入后触发器更新以及在表上用Insert和update在

  • 问题内容: 我有两个表,其中一个命名如下 另一个表具有以下字段: SID CID Per 如何为以下内容编写触发器: 如果表h1-h0的任何字段中发生 更新,则使用以下值更新表中的列: ((总数为1s-总数为0s / (总数1s +总数0s))/ 100 在此先感谢 我开发了一个触发器,但是它不起作用,它在第11行说了错误,您能说出什么问题吗? 问题答案: 在定义触发器之前,请确保更改定界符。另外

  • 问题内容: 我要在tableA上写一个插入触发器。它将使用相同的表但不同的列执行更新。执行此操作时出现错误。我的触发器是 我有一个应用程序将单独执行col2并将col1保持为空。因此,一旦插入行,我的触发器将为col1提供值。但是插入行时出现错误消息,提示“触发器失败且无效”。这该怎么做。TIA。 问题答案: 如果要分配一个简单的默认值,最简单的方法是使用DEFAULT子句在表上声明它。 这适用于

  • 问题内容: 我正在尝试编写触发器,我有下表:BookingRequest: 状态表: 被占领的房间: 我需要一个触发器,如果​​将具有相同ID的请求插入到OccupiedRoom表中,它将把BookingReques中的状态更改为1,所以我尝试了类似的操作 而且它不起作用,所以任何建议都非常有用 问题答案: 尝试这个:

  • 我正在尝试创建一个触发器,该触发器将在更新另一个表之后更新一个表。我需要它,这样如果数字列中的一个数字被更新,那么这需要记录在另一个表中。这就是我到目前为止所拥有的。。 测试更新到表: 如您所见,我正在尝试将新插入的用户编号存储到一个变量中,然后该变量将用于填充user_changes表的insertednumber列。任何帮助都将不胜感激,谢谢!

  • 问题内容: 所以我有两个这样的桌子… 我正在尝试创建一个触发器,该触发器将: 更新时被更新。 为了进一步使事情复杂化, 如果在when 更新中不存在,我想将其插入并设置为1。 我一直在寻找类似的问题: 1. 在使用自动增量字段插入触发器之前/之后,以及 2. 使用触发器来更新另一个数据库中的表以 尝试将2.合并在一起。这是我到目前为止的内容: 任何建议和指示,我们将不胜感激。或者可能是我忽略的另一