我有一个如下所示的MySQL查询:INSERT INTO beer(name, type, alcohol_by_volume, description, image_url) VALUES('{$name}', {$type}, '{$alcohol_by_volume}', '{$description}', '{$image_url}')
唯一的问题是name是一个唯一值,这意味着如果我遇到重复项,则会出现如下错误:
Error storing beer data: Duplicate entry 'Hocus Pocus' for key 2
有没有一种方法可以确保SQL查询不会尝试添加一个已经存在的唯一值,而无需为整个数据库运行
SELECT
查询? 最佳答案
您当然可以像这样使用INSERT IGNORE INTO:
INSERT IGNORE INTO beer(name, type, alcohol_by_volume, description, image_url) VALUES('{$name}', {$type}, '{$alcohol_by_volume}', '{$description}', '{$image_url}')
您也可以使用
ON DUPLICATE KEY
,但是如果您不想添加行,那么INSERT IGNORE INTO
是一个更好的选择。如果要在重复项时做更具体的操作,ON DUPLICATE KEY
更适合。如果决定使用
ON DUPLICATE KEY
,请避免在具有多个唯一索引的表上使用此子句。如果您的表具有多个唯一索引ON DUPLICATE KEY
-clause可能会产生意外的结果(您实际上没有100%的控制权会发生什么情况)示例:-下面的这一行仅更新ONE行(如果类型为1且alcohol_by_volume 1(且两列均为唯一索引))
ON DUPLICATE KEY UPDATE beer SET type=3 WHERE type=1 or alcohol_by_volume=1
把它们加起来:
重复时,
ON DUPLICATE KEY
可以正常工作,而不会发出警告或错误。当存在重复项时,
INSERT IGNORE INTO
会发出警告,但除此之外,请忽略以将重复项插入数据库。关于php - 避免在INSERT查询中重复唯一键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16338578/