在另一个表中更新后从表中删除会导致mysql中出错

在另一个表中更新后从表中删除会导致mysql中出错,mysql,sql,triggers,sql-delete,mysql-error-1442,Mysql,Sql,Triggers,Sql Delete,Mysql Error 1442,我在MySQL数据库中有两个表:“users”和“subscription”在表“users”中,每个用户都有一个subscriptionID,它是“subscriptions”中一行的ID或NULL。我需要在“用户”上创建一个更新触发器,删除“订阅”中的行,其中subscriptionID的新值设置为null 这是我的扳机: CREATE TRIGGER `trg_DeleteSubscriptions` AFTER UPDATE ON `users` FOR EACH ROW IF (NEW

我在MySQL数据库中有两个表:“users”和“subscription”在表“users”中,每个用户都有一个subscriptionID,它是“subscriptions”中一行的ID或NULL。我需要在“用户”上创建一个更新触发器,删除“订阅”中的行,其中subscriptionID的新值设置为null

这是我的扳机:

CREATE TRIGGER `trg_DeleteSubscriptions` AFTER UPDATE ON `users`
FOR EACH ROW IF (NEW.subscriptionID <=> NULL) THEN 
DELETE FROM subscriptions s WHERE s.subscriptionID = OLD.subscriptionID; 
END IF
创建触发器时没有问题,但是我有一个递归事件执行此查询:

UPDATE users SET AccountState = 2, subscriptionID = null WHERE UserID IN
(SELECT * from (SELECT u.UserID FROM users u INNER JOIN subscriptions a ON
u.subscriptionID = a.subscriptionID WHERE a.EndDate < CURRENT_TIMESTAMP) as c) 
并导致错误:1442-无法更新存储函数/触发器中的表“订阅”,因为调用此存储函数/触发器的语句已经使用了该表

我知道查询对于select*from select很奇怪。。 作为c,但这是为了解决另一个我无法更新的问题 通过创建 别名/临时表

我不明白是什么问题,因为触发器是从“users”表调用的,而删除是在“subscriptions”中进行的

更新:我很确定问题是由事件的查询引起的,而不是触发器本身,因为我使用简单的查询“updateuserssetsubscriptionid=null,其中UserID=24,触发器正确执行,没有错误…”


非常感谢

这是MySQL中记录的限制

引用表订阅的SQL语句导致触发触发器

因此,不允许触发器修改订阅表的内容

如果触发器尝试对订阅表应用更改,MySQL将引发错误


MySQL参考手册中记录了此限制。

示例数据和期望的结果将非常有用。好吧,假设用户1的订阅ID为5,订阅5的结束日期为2018-07-04 16:29:28。查询应将用户1的subscriptionID设置为“null”,因为EndDate