MySQL的V 5.6mysql的触发器:更新的列不属于不为空
您好,我有一个触发前更新问题:桌子上,我有一个标志defiend作为TINYINT,不为空,默认值1。我有一个更新之前的触发器,只要该行更新,就将该标志设置为1。但是,我也需要一个过程的标志明确设置为0,所以我想,
create trigger t BEFORE UPDATE on table for each row
BEGIN
IF new.flag is NULL THEN
set new.flag = 1
END IF;
问题:new.flag永远不能为null。与
IF new.flag is NULL THEN
set new.flag = 1
ELSEIF new.flag = 0 THEN
set new.flag = 3
END IF;
检查列设置为3时,我不包含在更新查询标志更新表。更糟的是,我无法对证空字符串把标志1,作为选择(“” = 0)返回true,如果使用:
IF new.flag is NULL OR new.flag = '' THEN
set new.flag = 1
END IF;
我旗从来没有明确设置为0。 NEW中没有列的更新不应为null?我能做什么,它是一个MySQL配置改变?
感谢
'new'将包含行更新后的值(以及之前的'old'值)。如果你没有在你的查询中设置它,它会有它以前的值('new'不是你在更新查询中使用的列的列表)。您可以使用例如在你的更新查询中设置flag = 3作为你想在触发器中设置为0的标记。或者你可能想要改变你的逻辑,普通的更新标记是例如带'on update current_timestamp'的'timestamp'字段。 – Solarflare
@Solarflare ha,设置一个假值,然后在rigger中设置为0似乎是这样做的:IF new.flag_indexation_required = 3 THEN set new。flag_indexation_required = 0; ELSE set new.flag_indexation_required = 1; END IF;你可以添加你的答案,所以我可以接受它吗? – jlb