2010-01-31 65 views
10

我建立一个评级系统,我想插入新行,如果name已包含name我想插入,如果它确实存在,我想1MySQL的插入在重复键

增加count领域举例来说,如果我有一个排的name“汤姆”,我尝试插入另一行与name“汤姆,然后我想+1上该行的领域count那已经存在。

如果与name“汤姆”的行不存在,我想插入一个新的,并设置count为1

我知道我可以用约3 SQL语句和一些if语句做到这一点,但是当2/3 sql命令正在执行时,这会使脚本变慢。

任何想法? 谢谢!

回答

12

看到INSERT ... ON DUPLICATE KEY UPDATE

如果指定了对重复密钥更新,和行插入,将导致一个唯一索引或主键的重复值,则执行旧行的更新。

例如

INSERT INTO table (name,counter) VALUES ('Bob', 1) 
    ON DUPLICATE KEY UPDATE counter=counter+1 
+0

嗯,它不太工作 - 虽然没有错误。我可以指定它应该“重复”的字段吗? – tarnfeld 2010-01-31 12:08:14

+0

排序,我将它添加到表的主键:D – tarnfeld 2010-01-31 12:11:00

+0

不必是主键。一个唯一的关键就足够了(尽管PRIMARY始终是唯一的) – VolkerK 2010-01-31 12:23:11