2011-09-13 68 views
0

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

例如我有一个人的桌子,一个字段是电话号码。是否可以构建一个触发器来验证电话号码是否有效(例如区号)以及无效电话号码的事件,以使插入失败并显示相应的错误消息?

回答

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 ; 
1

是的,这是可能的,经常使用的解决方案。

由于MySQL 5.5可以使用SIGNAL来引发错误信息。在此之前,您需要以其他方式调用错误。我通常会在UNIQUE索引中插入错误消息到表中,以便此插入失败,并且我的错误消息包含在MySQL的错误消息中。