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触发器正则表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章