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

时间:2012-01-28 10:51:34

标签: 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)

但我无法让它在MySql中运行。请帮助:)

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

我认为不应该有太多的大惊小怪或魔法。

If an e-mail does not exist in a table then insert several values into that table.

就是这样。最好是一个衬垫,嵌入编程代码中。

2 个答案:

答案 0 :(得分:6)

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

ALTER TABLE table ADD UNIQUE KEY column1 (column1)

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

INSERT IGNORE INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)

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

INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3) 
ON DUPLICATE KEY UPDATE column2 = @value2,  column3 = @value3

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

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

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

答案 1 :(得分:0)

你也可以这样做:

Declare @count INT;
SET @count = (SELECT COUNT(*) FROM table WHERE column1=@value1);
IF (@count = 0)
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)