检查删除是不是删除所有表值的触发器
Posted
技术标签:
【中文标题】检查删除是不是删除所有表值的触发器【英文标题】:TRIGGER that checks if that delete removes all the table values检查删除是否删除所有表值的触发器 【发布时间】:2019-12-11 14:09:51 【问题描述】:基本上我只是不想让DELETE FROM X
删除所有行。
例如:
DELETE FROM X WHERE ID = 3 OR ID = 4;
--> 允许,因为不要尝试删除所有表。
DELETE FROM X;
--> 不允许,因为它会删除所有表。
如何使用触发器做到这一点?
【问题讨论】:
如果只有两行:3 和 4 怎么办? 那么不,至少需要 1 行才能工作,但我认为如果控制它的 DELETE FROM X 是否足够 您不能使用触发器执行此操作,因为触发器在一个事务中执行。您看不到是否有可能由另一个客户端同时运行的另一个事务正在删除最后一行。也就是说,您的事务或其他事务都不会删除 所有 行,但是一旦你们俩都提交了,就不会剩下任何行了。 我可以尝试在触发器中执行查询吗? 上述 cmets 中描述的 Aß 很难避免这种情况。更改列上所需的条件可能更容易。为什么这是必要的? 【参考方案1】:如果没有where
子句,您实际上可能不需要触发器来阻止delete
。
你可以通过设置做你想做的事:
SET SQL_SAFE_UPDATES = 1;
这方面的文档是here。
注意:这当然适用于所有表格。如果您只想对一个表进行此限制,那么触发器可能是合适的。
【讨论】:
是的,我只想在一张桌子上,你能帮帮我吗?以上是关于检查删除是不是删除所有表值的触发器的主要内容,如果未能解决你的问题,请参考以下文章