【问题标题】:How to delete a row inside trigger?如何删除触发器内的一行?
【发布时间】:2019-07-17 06:49:45
【问题描述】:

有没有办法在 MariaDB/MySQL 中删除触发器内的一行(在触发触发器的表上)?

我知道在 postgres 中可以这样做。

这是我尝试过的 SQL。

TRIGGER trigger AFTER INSERT ON table FOR EACH ROW BEGIN
DELETE FROM table
WHERE expire_at <= CURRENT_TIMESTAMP;
END

我收到此错误消息:

代码:1442。无法更新存储中的表“cluster_events” 函数/触发器,因为它已被调用的语句使用 这个存储的函数/触发器。

有没有办法解决这个问题?

【问题讨论】:

  • '有什么方法可以在 MariaDB/MySQL 中删除触发器内的一行' - 如果它在触发触发器的表上删除。
  • 你可以使用 sp from trigger 来做删除操作
  • 好吧,我尝试创建一个对表执行删除操作并在触发器内部调用它的过程,但它给出了相同的结果。
  • @james 不,你不能,如果调用包含删除的函数,mysql 不会允许它也不会允许它。
  • '是否可以通过其他方式解决这个问题?' - 你真的想删除每一行吗?您可以考虑在事务中包含插入和删除。

标签: mysql sql database mariadb


【解决方案1】:

如果您想定期清除“旧”数据,请使用EVENT

一定要开启事件调度器。

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多