我有一个表,我想在它创建后添加一个检查约束。我做了一些谷歌搜索并找到了一些答案,但它们似乎没有用。这是我尝试过的:
ALTER TABLE noise_table
ADD CONSTRAINT chk_level CHECK (noise_level >= 0 and noise_level <= 0.1);
但是,在运行此语句之后,我仍然可以更新并在已检查的时间间隔之外插入,因此它似乎根本不起作用。我在这里缺少什么?
答案 0 :(得分:3)
正如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 ;
答案 1 :(得分:0)
MySQL不支持检查约束。
相反,MySQL“默默地忽略”检查约束,因此它不会显示错误。