1

我有一个表,我想在创建后添加一个检查约束。我做了一些谷歌搜索并找到了一些答案,但它们似乎不起作用。这是我尝试过的:

ALTER TABLE noise_table 
    ADD CONSTRAINT chk_level CHECK (noise_level >= 0 and noise_level <= 0.1);

但是,运行此语句后,我仍然可以在检查间隔之外更新和插入,因此它似乎根本不起作用。我在这里想念什么?

4

2 回答 2

3

ALTER TABLE语法中所述:

CHECK子句被所有存储引擎解析但忽略。

您可以改为定义BEFORE INSERTBEFORE 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 ;
于 2012-09-15T15:57:24.150 回答
0

MySQL 不支持检查约束。

相反,MySQL“默默地忽略”检查约束,因此它不会显示错误。

于 2012-09-15T15:57:36.323 回答