我的理解是MySql忽略了CHECK
语法中的CREATE TABLE
。因此我在想 - 为什么不使用触发器?
例如,我有一个人员表,一个字段是电话号码。是否有可能构建一个触发器来验证电话号码是否有效(例如区号),并且在电话号码无效的情况下使插入失败并显示相应的错误消息?
答案 0 :(得分:1)
是的,有可能并经常使用解决方案。
自MySQL 5.5起,您可以使用SIGNAL
来引发错误消息。在此之前,您需要以其他方式调用错误。我通常会将错误消息插入带有UNIQUE
索引的表中,以便此插入失败,并且我的错误消息包含在MySQL的错误消息中。
答案 1 :(得分:1)
是的,您可以创建一个触发器来验证插入的值并调用未知的过程。例如 -
CREATE TABLE table1
id INT(11) NOT NULL,
phone VARCHAR(10) DEFAULT NULL,
PRIMARY KEY (id)
);
DELIMITER $$
CREATE trigger1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
IF NOT NEW.phone REGEXP '^[0-9]{3}-[0-9]{2}-[0-9]{2}$' THEN
CALL error; -- Call nonexistent procedure
END IF;
END
$$
DELIMITER ;