我在skills
这里有此表(id = auto increment & primary key)
:
| id | skill |
--------------
| 1 | PHP |
--------------
在此表中,我具有技能PHP
。要插入一项新技能,我需要检查该技能是否已经存在。我已经尝试过这种方式,但是没有用。我对MySQL / SQL不太熟悉:
不应该工作:
INSERT INTO skills (`skill`) VALUES (`PHP`) ON DUPLICATE KEY UPDATE `skill` = `PHP`;
应该工作:
INSERT INTO skills (`skill`) VALUES (`HTML`) ON DUPLICATE KEY UPDATE `skill` = `HTML`;
答案 0 :(得分:1)
这是正确的命令:
INSERT INTO skills (`skill`)
VALUES ('PHP') -- fixed the backticks
ON DUPLICATE KEY UPDATE `skill` = 'PHP';
我认为反引号是错字。它们应该是单引号。
尽管我会这样写:
INSERT INTO skills (skill)
VALUES ('PHP')
ON DUPLICATE KEY UPDATE skill = VALUES(skill);
仅当您对skill
有唯一的约束时,这才“起作用”:
create unique index unq_skills_skill on skills(skill);
答案 1 :(得分:-1)
我只需在skills
上添加一个唯一键,然后使用insert ignore
INSERT IGNORE INTO skills (`skill`) VALUES (`PHP`)
然后可以使用mysql_affected_rows()
来验证是否添加了任何记录,如果返回0,则由于重复而没有添加记录。