仅当记录不存在时才插入表中

时间:2017-07-29 15:26:17

标签: mysql

我试图仅在用户的电子邮件不存在时才将用户插入到用户表中。

CREATE TABLE `users` ( 
`ID` INT(8) NOT NULL AUTO_INCREMENT , 
`FIRSTNAME` VARCHAR(150) NOT NULL , 
`LASTNAME` VARCHAR(150) NOT NULL , 
`EMAIL` VARCHAR(150) NOT NULL , 
`PASSWORD` VARCHAR(150) NOT NULL , 
PRIMARY KEY (`ID`(8)), 
UNIQUE (`EMAIL`)
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_bin;

我正在运行此查询:

SET @P1 = 'john';
SET @P2 = 'smith';
SET @P3 = 'whatever@example.com';
SET @P4 = 'password';

我有USERS_INSERT_NEW是一个存储过程,它只是插入users

SELECT IF ( NOT EXISTS ( SELECT `ID` FROM `users` WHERE `EMAIL` = 'whatever@example.com' ), CALL USERS_INSERT_NEW ( @P1, @P2, @P3, @P4 ) , NULL ) INSERTED

IF语句的作用如下: IF(表达式,有效,无效)为什么我可以使用我的存储过程验证?

2 个答案:

答案 0 :(得分:1)

更简单的方法是

INSERT INTO table_a
SELECT  b.*
FROM    table_b b
        LEFT JOIN table_a a
            ON a.ID = b.ID
WHERE   a.ID IS NULL

http://sqlfiddle.com/#!2/792d4/2

答案 1 :(得分:0)

在进一步阅读有关存储过程之后,我发现If语句只能在MySQL的存储过程中运行。我正在使用SQL背景,它更容易使用。无论如何我通过从users表中选择与此电子邮件关联的用户ID(如果找到)来解决此问题,我会警告用户该电子邮件存在,否则我将记录插入数据库。