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