2013-04-06 57 views
0

我试图在MYSQL 5.0.95中作出一个触发器,防止在电子邮件字段中找不到@符号时发生插入。我知道还有比触发这样其他的其他方式,但我真的想学习如何触发工作MYSQL触发器将不会被创建,由于错误

CREATE TRIGGER triggerUsersEmail 
BEFORE INSERT ON Users 
FOR EACH ROW 
BEGIN 
IF (Users.email NOT LIKE '%@%') THEN 
DECLARE dummy INT; 
SELECT not a valid email address INTO dummy FROM Users WHERE 1=1 
END IF; 
END;$$ 

我运行上面的$$在phpMyAdmin的分隔符,但我得到这个错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE dummy INT; SELECT not a valid email address INTO dummy FROM Users WHERE' at line 6 

回答

0

你试过这个吗?

 

    CREATE TRIGGER triggerUsersEmail 
    BEFORE INSERT ON Users 
    FOR EACH ROW 
    BEGIN 
    DECLARE dummy INT; 
    IF (Users.email NOT LIKE '%@%') THEN 
    SELECT not a valid email address INTO dummy FROM Users WHERE 1=1 
    END IF; 
    END;$$ 

开始后声明变量。

_ _编辑

 
DELIMITER $$ 
CREATE TRIGGER triggerUsersEmail 
BEFORE INSERT ON users 
FOR EACH ROW 
BEGIN 
    DECLARE dummy INT; 

    IF (Users.email NOT LIKE '%@%') THEN 
     SELECT "not a valid email address" INTO dummy FROM Users WHERE 1=1; 
    END IF; 
END; 

$$ 

这个工作对我的服务器现在

+0

我得到“#1064 - 你在你的SQL语法错误;检查对应于你的MySQL服务器版本的手册为正确的语法使用附近'电子邮件地址INTO虚拟从用户WHERE 1 = 1 END IF; END'在第7行“ – Macmee 2013-04-06 14:52:08

+0

其实我没有得到你想要的这个选择查询。它似乎很错误:)你能分享你的用户表,并告诉我们你想要做什么 – 2013-04-06 14:59:11

+0

MYSQL 5.0没有信号,所以我试图通过抛出我自己的错误来阻止INSERT发生。即使我将“SELECT not a valid email address INTO dummy FROM Users WHERE 1 = 1”更改为“SET NEW.email ='[email protected]'”这样的有效内容,它仍然会引发同样的错误。我的用户表是http://pastebin.com/Nvtx9Vhy – Macmee 2013-04-06 15:06:53