如果(SELECT ...)= 0 INSERT.在MySql中

Jes*_*per 3 mysql database if-statement subquery

我习惯在sql server中这样做

IF (SELECT COUNT(*) FROM table WHERE column1=@value1) = 0
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)
Run Code Online (Sandbox Code Playgroud)

但我无法真正让它在MySql中工作.请帮忙 :)

----------------编辑------------------

我想,不应该有太多的大惊小怪或魔法.

If an e-mail does not exist in a table then insert several values into that table.
Run Code Online (Sandbox Code Playgroud)

而已.优选地是一个衬垫,嵌入编程代码中.

Kai*_*aii 7

另一种方法是使用该INSERT IGNORE语句.假设column1应该只保存唯一值,您可以UNIQUE KEY在字段上添加约束(如果它不是您的主键):

ALTER TABLE table ADD UNIQUE KEY column1 (column1)
Run Code Online (Sandbox Code Playgroud)

然后你可以这样写你的查询:

INSERT IGNORE INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)
Run Code Online (Sandbox Code Playgroud)

或者如果要自动更新其他字段,请使用ON DUPLICATE KEY UPDATE:

INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3) 
ON DUPLICATE KEY UPDATE column2 = @value2,  column3 = @value3
Run Code Online (Sandbox Code Playgroud)

让数据库使用唯一键自动处理它有几个好处:

  • 通过使用索引而不是全表扫描,可以获得更好的性能和可伸缩性
  • failsafe - 您无法使用错误的查询意外添加具有相同唯一标识符的两行
  • 更好的查询可读性

注意:唯一键也可能跨越多行.愚蠢的例子:"ip"和"port"的组合可以组合成唯一标识符"connection".