在数据充满后向表中添加检查约束

时间:2012-09-15 15:53:03

标签: mysql sql

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

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

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

2 个答案:

答案 0 :(得分:3)

正如ALTER TABLE Syntax所述:

  

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

您可以改为定义BEFORE INSERTBEFORE 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“默默地忽略”检查约束,因此它不会显示错误。