【问题标题】:MYSQL trigger will not be created due to errorMYSQL 触发器由于错误不会被创建
【发布时间】:2013-04-06 14:34:50
【问题描述】:

我正在尝试在 MYSQL 5.0.95 中创建一个触发器,以防止在电子邮件字段中找不到 @ 符号时发生插入。我知道除了触发器之外还有其他方法可以做到这一点,但我真的很想了解触发器的工作原理

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

【问题讨论】:

    标签: mysql triggers phpmyadmin


    【解决方案1】:

    你试过了吗?

    CREATE TRIGGER triggerUsersEmail 在插入用户之前 每一行 开始 声明虚拟 INT; IF (Users.email NOT LIKE '%@%') THEN SELECT not a valid email address INTO dummy FROM Users WHERE 1=1 万一; 结束;$$

    在开始后声明变量。

    __ 编辑

    分隔符 $$ CREATE TRIGGER triggerUsersEmail 在插入用户之前 每一行 开始 声明虚拟 INT; IF (Users.email NOT LIKE '%@%') THEN SELECT "not a valid email address" INTO dummy FROM Users WHERE 1=1; 万一; 结尾; $$

    这在我的服务器上工作

    【讨论】:

    • 现在我得到“#1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 'email address INTO dummy FROM Users WHERE 1 附近使用=1 END IF; END' 在第 7 行"
    • 其实我没有得到你想要的这个选择查询。看起来很不对:) 你能分享你的用户表并告诉我们你想做什么
    • MYSQL 5.0 没有 SIGNAL 所以我试图通过抛出我自己的错误来阻止 INSERT 的发生。即使我将“SELECT not a valid email address INTO dummy FROM Users WHERE 1=1”更改为“SET NEW.email = '5@5.com'”之类的有效电子邮件地址,它仍然会引发相同的错误。我的用户表是pastebin.com/Nvtx9Vhy
    • 你可以尝试用引号选择你的消息
    • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'END IF; 附近使用的正确语法; END' 在第 8 行
    猜你喜欢
    • 2013-07-16
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2021-11-25
    • 2016-02-11
    相关资源
    最近更新 更多