mysql - MySQL 在没有其他类似的情况下插入新值
问题描述
我正在尝试通过在表中插入新值来解决问题。主键是 ID 不是电子邮件...在插入之前,我需要检查其他记录的电子邮件值。如果没有匹配插入的电子邮件,则插入数据。但我无法为此编写正确的代码......
IF EXIST (SELECT email FROM users WHERE email = "email")
THEN
BEGIN
'We Have Records of this Customer'
END
ELSE
BEGIN
INSERT INTO users
VALUES (null,'email9','password9','forename9','lastname9')
END
END IF
或者:
IF SELECT COUNT(*) FROM users WHERE email = 'email' > 0
THEN
BEGIN
//email exist
END
ELSE
BEGIN
//inserting
END
END IF
解决方案
这看起来像是 MySQLINSERT ... ON DUPLICATE KEY UPDATE
语法的一个很好的用例。
首先,您要UNIQUE
在 column 上创建一个约束email
。这是表示您的业务规则的正确方法:
ALTER TABLE users ADD CONSTRAINT users_unique_email UNIQUE (email);
现在,如果将要插入的记录会在主键或该UNIQUE
约束上生成重复项,那么 MySQL 允许您将操作转换为 an UPDATE
。
在您的情况下,由于您不想在这种情况下更新任何内容,您可以简单地重新分配email
列(我们知道这里是相同的)。
考虑:
INSERT INTO users
VALUES (null,'email9','password9','forename9','lastname9')
ON DUPLICATE KEY UPDATE SET email = 'mail9';