2012-01-28 85 views
3

我习惯了在SQL Server如果(SELECT ...)= 0 INSERT。在MySQL

IF (SELECT COUNT(*) FROM table WHERE [email protected]) = 0 
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3) 

这样做,但我真的不能让它在MySQL的。请帮忙:)

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

There shouldn'我会承担很多大惊小怪的事情。

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

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

+0

可能的重复[我如何更新如果存在,插入如果不是(又名upsert或合并)在MySQL?](http://stackoverflow.com/questions/1218905/how-do-i-update-if-存在插入如果没有插入或合并在mysql中) – 2012-01-28 11:04:50

+0

它是完整的查询吗?或者只是一个专栏?如果它的一列然后把你的完整查询。 – Bajrang 2012-01-28 11:05:35

+0

关于你的编辑:阅读我的答案如下:-)没有魔术涉及 – Kaii 2012-01-28 11:51:24

回答

4

另一种方式来做到这一点是使用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 

让数据库处理,它会自动使用uniqu e键有以下几个优点:通过索引的使用

  • 更好的性能和可扩展性,而不是全表扫描
  • 故障安全 - 你不能添加两行相同的唯一标识符不小心用错了查询
  • 更好您的查询的可读性

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

+0

感谢您的建议,但不幸的是,电子邮件并不是唯一的。唯一唯一的字段和密钥是自动递增的ID – Jesper 2012-01-28 11:50:13

+0

,但在您的问题中,似乎您试图阻止同一电子邮件地址的多个条目...定义它独特的声音就像正确的解决方案? – Kaii 2012-01-28 11:55:08

+0

哈哈......授予:D数据库有点混乱,我不想让事情变得更糟。 LOL – Jesper 2012-01-28 11:57:56

0

也可以做这样的:

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