如何确定插入触发器中是否包含表字段

时间:2016-04-25 19:45:26

标签: mysql

是否可以在触发此INSERT语句触发的上下文中检查某个字段是否包含在INSERT语句中?

例如,假设customers表包含以下字段:customerid INT NOT NULLisCrazy BIT(1) DEFAULT b'1'。此表在插入之前有一个触发器,有必要检查INSERT语句是否包含isCrazy字段。

INSERT INTO customers (customerid) VALUES (1);

OR

INSERT INTO customers (customerid, isCrazy) VALUES (1, b'0');

如果字段已定义,则应继续保存,否则需要采取某些措施来确定应插入此字段的正确值;这不一定等于默认值。

我遇到的问题是,如果isCrazy字段未包含在INSERT语句中,则NEW.isCrazy保留默认值(b' 1') ;就像插入的值实际上是这样定义的一样。是否有可能将两个案件区分开来?

1 个答案:

答案 0 :(得分:1)

我认为没有任何明确的方法来判断该值是明确提供还是来自默认值。

我能想到的唯一选择是使用应该永远不应由应用程序代码明确提供的默认值。然后你可以测试NEW.option是否等于这个;如果是,则将它设为默认值,并且触发器可以将其替换为您真正想要的默认值。