我有一个表,我想在创建后添加一个检查约束。我做了一些谷歌搜索并找到了一些答案,但它们似乎不起作用。这是我尝试过的:
ALTER TABLE noise_table
ADD CONSTRAINT chk_level CHECK (noise_level >= 0 and noise_level <= 0.1);
但是,运行此语句后,我仍然可以在检查间隔之外更新和插入,因此它似乎根本不起作用。我在这里想念什么?
如ALTER TABLE
语法中所述:
该
CHECK
子句被所有存储引擎解析但忽略。
您可以改为定义BEFORE INSERT
并BEFORE UPDATE
触发在不满足您的条件时引发错误:
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 不支持检查约束。
相反,MySQL“默默地忽略”检查约束,因此它不会显示错误。