这是我想要做的。如果表中已存在唯一索引(代码),则插入。如果存在则只需更新行。
我无法使用主键,因为它是自动增量ID。这是代码
$sql="INSERT INTO codes (code,registration,country)
VALUES ('$war','$regi','$country') ON DUPLICATE KEY UPDATE code='$war', registration='$regi', country='$country'";
但它不起作用,因为我认为它正在检查重复的主键。因此,当我尝试插入列代码的值与前一行相同的行时,我得到Duplicate entry' xxx'对于密钥'代码'错误。那么如何使这个工作为唯一索引代码?
艾哈迈尔
答案 0 :(得分:0)
ON DUPLICATE KEY UPDATE
适用于UNIQUE
索引以及PRIMARY KEY
值。尝试将您尝试更新的其中一个值设置为数据库表中的UNIQUE
。
答案 1 :(得分:0)
您只需将code
设置为唯一索引即可。然后,只要您尝试执行code
匹配的插入,它就会更新。
根据需要更改此代码
alter table `table` add unique index(`code`);
答案 2 :(得分:0)
你是对的,在你的桌子上有一个主键不允许你插入重复的键值。
过去,我使用过这样的东西:
SELECT COUNT(*) FROM代码 WHERE code ='$ war'
然后,如果计数是> 0,你知道有重复,你做了:
更新代码 SET registration ='$ regi',country ='$ country' WHERE code ='$ war'
否则你会这样做:
INSERT INTO代码(代码,注册,国家/地区) 价值('$ war','$ regi','$ country')
但是,如果我们假设您使用的是MySQL,那么您可以使用INSERT IGNORE或REPLACE。
如果您使用:
INSERT IGNORE代码(代码,注册,国家/地区) 价值('$ war','$ regi','$ country')
如果代码尚不存在,将插入值。如果代码确实存在,则不会插入任何记录,MySQL将以静默方式丢弃该语句而不会产生错误。
我认为你可能想要的是:
更换INTO代码(代码,注册,国家/地区) 价值('$ war','$ regi','$ country')
如果记录是新的,则REPLACE INTO的行为就像INSERT INTO一样。但是如果主键是重复的,它将执行UPDATE。
同样,INSERT IGNORE和REPLACE INTO仅适用于MySQL。
参考:http://www.tutorialspoint.com/mysql/mysql-handling-duplicates.htm