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

Mysql 仅当记录不存在时才插入到表中,mysql,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`

我正在尝试仅当用户的电子邮件不存在时才将用户插入用户表

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\u INSERT\u NEW是一个存储过程,它只是在USERS表中插入

如果语句是这样工作的:
如果表达式,valid,invalid,那么如果存储过程进行了验证,为什么不能使用它呢

更简单的方法是

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

在进一步阅读存储过程之后,我发现If语句只在MySQL中的存储过程中起作用。我将使用SQL后台,它更易于使用。无论如何,我通过从用户表中选择与此电子邮件关联的用户ID解决了此问题。如果找到,我会警告用户电子邮件存在,否则我会将记录插入数据库。

来自文档:如果expr2或expr3中只有一个显式为空,IF函数的结果类型是非空表达式的类型。不要麻烦“先检查”。只需执行插入。
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