mysql删除行如果更新后所有null都没有触发器

时间:2018-05-16 18:29:59

标签: mysql sql database triggers

对于某个表,如果某个字段更新为Null,并且该行的所有字段现在都为空,我想删除该行。我知道这可以通过触发器完成,但我听说应尽可能避免使用触发器。是否有另一种解决方案可以避免触发,并且成本更低?在这种情况下触发器甚至会有多昂贵(它比运行两个查询要便宜吗?)

2 个答案:

答案 0 :(得分:2)

您有三种选择:

  1. 每次更新后放入DELETE FROM TABLE WHERE FIELD == NULL。

  2. 使用触发器

  3. 通过存储过程集中所有更新,以便您可以在更新记录时调用SP,然后可以在#1中调用DELETE FROM命令。

答案 1 :(得分:0)

尽可能不应避免触发器。它们应该谨慎使用。

首先,在我参与的许多系统中,所有DML操作都嵌入在存储过程中。基本上,触发器将执行的任何操作都在存储过程中 - 以及其他功能,例如日志记录。

其次,如果您遇到需要触发的问题,请使用触发器。例如,在Oracle 12C之前,您需要一个触发器来添加自动递增的主键。如果你需要的话,一定要这样做。

不要过火。但是你的特定问题似乎是一个触发器非常有用的例子。

要意识到可能还有其他解决方案。例如,也许一个视图会做你想要的:

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

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