我的理解是,MySql在CREATE TABLE
语法中忽略CHECK
。因此我在想 - 为什么不使用触发器?MySql表和触发器
例如我有一个人的桌子,一个字段是电话号码。是否可以构建一个触发器来验证电话号码是否有效(例如区号)以及无效电话号码的事件,以使插入失败并显示相应的错误消息?
我的理解是,MySql在CREATE TABLE
语法中忽略CHECK
。因此我在想 - 为什么不使用触发器?MySql表和触发器
例如我有一个人的桌子,一个字段是电话号码。是否可以构建一个触发器来验证电话号码是否有效(例如区号)以及无效电话号码的事件,以使插入失败并显示相应的错误消息?
是的,您可以创建一个触发器来验证插入的值并调用未知的过程。例如 -
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 ;
是的,这是可能的,经常使用的解决方案。
由于MySQL 5.5可以使用SIGNAL
来引发错误信息。在此之前,您需要以其他方式调用错误。我通常会在UNIQUE
索引中插入错误消息到表中,以便此插入失败,并且我的错误消息包含在MySQL的错误消息中。