MySql表和触发器

时间:2011-09-13 10:34:57

标签: mysql triggers

我的理解是MySql忽略了CHECK语法中的CREATE TABLE。因此我在想 - 为什么不使用触发器?

例如,我有一个人员表,一个字段是电话号码。是否有可能构建一个触发器来验证电话号码是否有效(例如区号),并且在电话号码无效的情况下使插入失败并显示相应的错误消息?

2 个答案:

答案 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 ;