【问题标题】:MySQL insert new value when no other like thatMySQL 在没有其他类似的情况下插入新值
【发布时间】:2019-03-29 23:57:19
【问题描述】:

我正在尝试通过向表中插入新值来解决问题。主键是 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

【问题讨论】:

    标签: mysql sql count sql-update sql-insert


    【解决方案1】:

    这看起来是 MySQL INSERT ... ON DUPLICATE KEY UPDATE 语法的一个很好的用例。

    首先,您要在列email 上创建UNIQUE 约束。这是表示您的业务规则的正确方式:

    ALTER TABLE users ADD CONSTRAINT users_unique_email UNIQUE (email);
    

    现在,如果即将插入的记录会在主键或 UNIQUE 约束上生成重复项,那么 MySQL 允许您将操作转为 UPDATE

    在您的情况下,由于您不想在这种情况下更新任何内容,您可以简单地重新分配 email 列(我们知道这里是相同的)。

    考虑:

    INSERT INTO users 
        VALUES (null,'email9','password9','forename9','lastname9')
        ON DUPLICATE KEY UPDATE SET email = 'mail9';
    

    【讨论】:

      【解决方案2】:

      我无法发表评论,但我发布了这个。我建议通过选择 * 并解析输出来为您创建一个外部脚本(如在 python 或 java 中),因为 SQL 本身没有这样做的能力。

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 1970-01-01
        • 2018-02-17
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 2015-06-28
        相关资源
        最近更新 更多