MySQL触发器正则表达式不起作用

Posted

技术标签:

【中文标题】MySQL触发器正则表达式不起作用【英文标题】:MySQL trigger regexp not working 【发布时间】:2018-03-15 21:04:57 【问题描述】:

我正在尝试按用户的电子邮件地址对用户进行分组。 正则表达式不工作。帮助

BEGIN

DECLARE group_id tinyint(4);

SET @user_email = ( SELECT email FROM `users` WHERE id = NEW.id );

IF (SELECT @user_email REGEXP '\.com$') THEN SET group_id  = 17;
ELSE SET group_id  = 18;
END IF;

INSERT INTO `user_usergroup_map` (`user_id`, `group_id`) VALUES (NEW.id, group_id);

END

--------- 新的-------- 我又做了一些测试。

这行得通...

BEGIN
    INSERT INTO `user_usergroup_map` (`user_id`, `group_id`) VALUES( 3, 18 );
END

但这没有用

BEGIN
    INSERT INTO `user_usergroup_map` (`user_id`, `group_id`) VALUES( 
    NEW.id, 18);
END

【问题讨论】:

"不工作" -- 崩溃服务器?得到错误?得到错误答案?什么答案是错误的? SELECT 'a.com' REGEXP '\.com$', 'a.org' REGEXP '\.com$'; --> 1, 0;所以看起来不错。考虑将\. 更改为[.] @RickJames 我没有收到任何错误消息,也没有崩溃。简单地说,没有新的插入。 【参考方案1】:

与其试图找出什么是行不通的,不如让我建议这种简化:

BEGIN
    INSERT INTO `user_usergroup_map` (`user_id`, `group_id`)
        SELECT NEW.id,
               IF( email REGEXP '[.]com$', 17, 18 )
            FROM users
            WHERE id = NEW.id;
END

一个区别:你的版本总是插入一行;如果users 中缺少id,我的不会。

【讨论】:

您确定id 确实存在于users 中但不存在于user_usergroup_map 中? 是的。 usergroup_map 键控到 user_id 和 group_id。用户可以有多个 group_id 但不能有相同的 group_id。 它起作用了..我将触发器添加到错误的表中。

以上是关于MySQL触发器正则表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式的replace不起作用?

Notepad++ 正则表达式替换 - \1 不起作用?

为啥这个 javascript 正则表达式不起作用?

为啥我的产品代码的正则表达式不起作用? [关闭]

调试后正则表达式不起作用

Postgres 正则表达式替换不起作用