mysql更新后如果全部为空则删除行,不带触发器

lvmkulzt  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(371)

对于某个表,如果一个字段被更新为null,并且该行的所有字段现在都为null,我想删除这一行。我知道这可以用触发器来完成,但我听说触发器应该尽可能避免。有没有另一种解决方案可以避免触发,而且成本更低?在这种情况下,触发器的成本有多高(是否比运行两个查询便宜?)

kuhbmx9i

kuhbmx9i1#

您有三种选择:
在每次更新后放入delete from表,其中field==null。
使用触发器
通过存储过程集中所有更新,以便在更新记录时可以调用sp,然后sp可以调用#1中的delete from命令。

q8l4jmvw

q8l4jmvw2#

不应尽可能避免触发器。他们应该谨慎使用。
首先,在我参与的许多系统中,所有的dml操作都嵌入到存储过程中。基本上,触发器可以做的任何事情都在存储过程中——以及其他功能,如日志记录。
第二,如果你有一个需要触发器的问题,那么就使用触发器。例如,在oracle12c之前,您需要一个触发器来添加一个自动递增的主键。如果你需要的话,一定要做。
别过火了。但你的特殊问题似乎是一个触发器非常有用的例子。
一定要意识到可能还有其他解决办法。例如,视图可能会满足您的要求:

create view v_t as
    select t.*
    from t
    where col1 is not null or col2 is not null or . . .;

这将节省触发器的所有开销。如果表太大,可以删除all- NULL 使用计划作业的行。

相关问题