Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何创建触发器以验证记录是否不存在?_Mysql - Fatal编程技术网

Mysql 如何创建触发器以验证记录是否不存在?

Mysql 如何创建触发器以验证记录是否不存在?,mysql,Mysql,我使用的是mysql的5.5.47版Ubuntu。我正在尝试创建一个触发器,以便在表上插入之前进行检查。我的想法是:若LoginName列的值和Email列的值存在,那个么插入一条新记录将不会被实现 表: 我已经这样做了: 错误: MySQL说:文档 1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法 “NEW.LoginName”附近不在 挑选* 从第4行的MemberProfile AS'开始 在我看来,NEW.[columns]是insert操

我使用的是mysql的5.5.47版Ubuntu。我正在尝试创建一个触发器,以便在表上插入之前进行检查。我的想法是:若LoginName列的值和Email列的值存在,那个么插入一条新记录将不会被实现

表:

我已经这样做了:

错误:

MySQL说:文档

1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法 “NEW.LoginName”附近不在 挑选* 从第4行的MemberProfile AS'开始


在我看来,NEW.[columns]是insert操作的一个参数。我不太清楚。有人能帮忙吗?

这不需要触发器。您可以将此功能实现为唯一的键约束:

CREATE UNIQUE INDEX username_email ON MemberProfile (LoginName, Email);
一旦设置完毕,尝试插入具有重复登录名和电子邮件地址的行将产生错误:

ERROR 1062 (23000): Duplicate entry 'username-test@example.com' for key 'username_email'

顺便说一句:请记住,这个约束仍然允许多个用户使用相同的用户名或相同的电子邮件存在——只是不能同时使用这两个用户名或电子邮件。这可能不是个好主意。

行得通!。如果我在2个条件中选择1,或者用户名或电子邮件存在,我是否需要创建一个触发器,例如NEW.username=OLD.username或NEW.email=OLD.email?@Ntlzz93否,您也不需要触发器。只需创建两个唯一的索引:一个在LoginName上,另一个在电子邮件上。为什么我的帖子被否定了?
DECLARE @Email varchar(255),
DECLARE @LoginName varchar(255),
SELECT @Email= INSERTED.Email FROM INSERTED
SELECT @LoginName = INSERTED.LoginName FROM INSERTED
IF @Email,@LoginName not in (
     select *
     From MemberProfile AS A  
    where ( @LoginName = A.LoginName and @Email = A.Email)
) THEN 
     CALL `Insert not allowed`;
END IF;
END;
ERROR 1062 (23000): Duplicate entry 'username-test@example.com' for key 'username_email'
DECLARE @Email varchar(255),
DECLARE @LoginName varchar(255),
SELECT @Email= INSERTED.Email FROM INSERTED
SELECT @LoginName = INSERTED.LoginName FROM INSERTED
IF @Email,@LoginName not in (
     select *
     From MemberProfile AS A  
    where ( @LoginName = A.LoginName and @Email = A.Email)
) THEN 
     CALL `Insert not allowed`;
END IF;
END;