如果选择然后插入SQL

问题描述:

我想只插入一行,如果下面的SELECT返回0或没有行。如果选择然后插入SQL

喜欢的东西:

IF(SELECT为0),然后插入()

我如何在MYSQL做到这一点?

我只想做一个查询,而不是这两个查询:

$r=mysql_query("SELECT `ID`,`Country` FROM `Users` WHERE `IP`='".$ip."'",$connection); 

if(!$r || mysql_num_rows($r) <= 0) 
    $ir=mysql_query("INSERT INTO `Users` (`IP`,`Country`) VALUES ('".$ip."','".$country."')",$connection); 
+0

是否要确保某些列的唯一性?如果是这样,那么在Oracle中使用'UNIQUE' /'PRIMARY'键和'INSERT IGNORE'语句 – poncha 2012-03-28 21:20:48

+0

这是MERGE,不确定是否支持mysql。 – Randy 2012-03-28 21:21:39

+0

寻找['INSERT ... ON DUPLICATE KEY UPDATE'(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)? – Shef 2012-03-28 21:22:12

我想他可能是在寻找是沿着这个答案线的东西:

https://*.com/a/8185348

编辑: 也柜面你曾经有,你需要删除的唯一或其他方面的限制问题:

show create table <tablename> 

这将显示U中创建的表的所有细节..

,那么你必须通过它有 防爆参考砸:

UNIQUE KEY <reference_name> (‘value’) 

,那么你做的:

alter table <tablename> drop index <reference_name> 
+0

我无法理解这 – Jigberto 2012-03-28 21:32:39

+0

这是一个很复杂的问题和内部查询。当在INSERT INTO \ Users \(国家\',\'IP \')VALUES('US','23.123.123')上重复密钥更新\ ID \'''\'ID \'; ''就足够了,如果*'(\'Country \','''''''''''UNIQUE'约束'' – Shef 2012-03-28 21:33:49

+0

我认为你是对的,如何将UNIQUE添加到已经创建的表中去某些列? – Jigberto 2012-03-28 21:38:29

真,插入

IF(SELECT 1, INSERT INTO users, 0)=1 

假,不要插入

IF(SELECT 0, INSERT INTO users, 0)=1 
+0

这不起作用 – Jigberto 2012-03-28 22:19:20

  1. 添加唯一键(如果它仍然存在)

    ALTER TABLE Users ADD UNIQUE KEY (IP);

  2. 每当你获得新的IP /国家对执行此:

    INSERT IGNORE INTO Users (IP,Country) VALUES ('1.2.3.4','Zimbabwe');

INSERT INTO users (IP,Country) 
VALUES (xx, yy) 
WHERE NOT EXISTS (SELECT * 
    FROM users nx 
    WHERE nx.ip = xx -- KEYFIELDS 
    ); 
+0

对downvoter:请解释。 – wildplasser 2013-05-14 22:23:52