Mysql 我的触发语句有什么问题吗?

Mysql 我的触发语句有什么问题吗?,mysql,stored-procedures,triggers,Mysql,Stored Procedures,Triggers,创建触发器语句后,无法正常插入数据,但程序会抛出错误: 错误代码1109:字段列表中的表“用户”未知 --create table CREATE TABLE `user` ( `user_id` int(11) NOT NULL, `email` varchar(45) DEFAULT NULL, `username` varchar(45) NOT NULL, `password` varchar(45) NOT NULL, `phone_number` int(11) D

创建触发器语句后,无法正常插入数据,但程序会抛出错误: 错误代码1109:字段列表中的表“用户”未知

--create table
CREATE TABLE `user` (
  `user_id` int(11) NOT NULL,
  `email` varchar(45) DEFAULT NULL,
  `username` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  `phone_number` int(11) DEFAULT NULL,
  `type` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--create trigger
DELIMITER $$
CREATE TRIGGER Checkinfo
    before INSERT ON dbi_202x.user FOR EACH ROW 
    BEGIN
        if( user.email not REGEXP '^[^@]+@[^@]+\.[^@]{2,}$')
        THEN 
            SET new.email = `wrong email`;
        end if;
    END;
$$
--insert data
INSERT INTO `dbi_202x`.`user`(`user_id`,`email`,`username`,`password`,`phone_number`,`type`)VALUES(
396812,
'sdf@sxcv.com',
'sadfk23',
'asdf',
1369846978,
'employee');

你能帮我找出为什么这不起作用吗?

你可以在MySQL客户机中测试regexp,而无需使用触发器:

mysql> select 'user@example.com' REGEXP '^[^@]+@[^@]+\.[^@]{2,}$' as email_match;
+-------------+
| email_match |
+-------------+
|           1 |
+-------------+
这是意料之中的,但是如果我们给它一封无效的电子邮件呢

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\.[^@]{2,}$' as email_match;
+-------------+
| email_match |
+-------------+
|           1 |
+-------------+
这应该是0,但为什么不是

因为
\。
不足以逃逸正则表达式中的点。当SQL解析字符串时,单个
\
丢失。我们需要一个文本
\
位于正则表达式字符串中,以转义点。因此,我们必须使用双
\\
,以便在MySQL扫描正则表达式一次后,正则表达式中仍保留单个文本
\

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,}$' as email_match;
+-------------+
| email_match |
+-------------+
|           0 |
+-------------+
另外,值得一提的是,电子邮件比简单的验证更复杂。这篇旧的归档博客多次尝试进行全面的电子邮件验证:


其中最成功的是在中使用的正则表达式。

是的。搞定了+10