我试图仅在用户的电子邮件不存在时才将用户插入到用户表中。
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(表达式,有效,无效)为什么我可以使用我的存储过程验证?
答案 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
答案 1 :(得分:0)
在进一步阅读有关存储过程之后,我发现If语句只能在MySQL的存储过程中运行。我正在使用SQL背景,它更容易使用。无论如何我通过从users表中选择与此电子邮件关联的用户ID(如果找到)来解决此问题,我会警告用户该电子邮件存在,否则我将记录插入数据库。