我有一張表,我想在檢查約束已經創建後添加它。我做了一些谷歌搜索,並找到了一些答案,但他們似乎沒有工作。這是我曾嘗試:在表中填充檢查約束到數據已滿
ALTER TABLE noise_table
ADD CONSTRAINT chk_level CHECK (noise_level >= 0 and noise_level <= 0.1);
但是,運行此語句後,我還是可以更新和插入檢查區間之外,因此它不會出現在所有的工作。我在這裏錯過了什麼?
我有一張表,我想在檢查約束已經創建後添加它。我做了一些谷歌搜索,並找到了一些答案,但他們似乎沒有工作。這是我曾嘗試:在表中填充檢查約束到數據已滿
ALTER TABLE noise_table
ADD CONSTRAINT chk_level CHECK (noise_level >= 0 and noise_level <= 0.1);
但是,運行此語句後,我還是可以更新和插入檢查區間之外,因此它不會出現在所有的工作。我在這裏錯過了什麼?
由於ALTER TABLE
Syntax下記載:
的
CHECK
子句解析,但所有的存儲引擎忽略。
你可以代替定義BEFORE INSERT
和BEFORE UPDATE
triggers加薪事件的錯誤,你不符合標準:
DELIMITER ;;
CREATE TRIGGER chk_insert_level BEFORE INSERT ON noise_table FOR EACH ROW
IF NOT (NEW.noise_level >= 0 AND NEW.noise_level <= 0.1) THEN
CALL invalid_noise_level; -- non-existent procedure, raises an error
END IF;;
CREATE TRIGGER chk_update_level BEFORE UPDATE ON noise_table FOR EACH ROW
IF NOT (NEW.noise_level >= 0 AND NEW.noise_level <= 0.1) THEN
CALL invalid_noise_level; -- non-existent procedure, raises an error
END IF;;
DELIMITER ;
MySQL不支持引發真正的異常嗎? –
@a_horse_with_no_name:你說得對,從5.5開始['SIGNAL'](http://dev.mysql.com/doc/en/signal.html)。我仍然陷入5.1世界。 :( – eggyal
MySQL不支持檢查約束。
相反,MySQL「默默地忽略」檢查約束,因此它不顯示錯誤。
有趣的......那麼你如何執行限制,如「列x只能在值x和y之間」?當然有幾個數據庫強制執行這樣的約束...... – zebra
@斑馬:這隻能使用MySQL中的觸發器。 –
MySQL根本不支持檢查約束。 –