首页 > 解决方案 > 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

标签: mysqlsqlcountsql-updatesql-insert

解决方案


这看起来像是 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';

推荐阅读