重复密钥更新..数据库密钥?

时间:2013-03-18 19:18:11

标签: php mysql sql insert pdo

我有一张表(id, name, price, menu_id)

我有一个页面,其中显示了每个项目的名称和价格,用户可以对其进行编辑。

但是当我提交时,它会创建新的行。

索引位于主键上。它应该在别的东西上吗?

我尝试了以下内容:

INSERT INTO gerechten 
SET gerecht_naam = :naam, gerecht_prijs = :prijs, menu_id = :menuid 
ON DUPLICATE KEY 
UPDATE gerecht_naam = :naam, gerecht_prijs = :prijs

2 个答案:

答案 0 :(得分:1)

只要表中的任何unique key崩溃,您的查询就会转换为更新。由您决定应该放置此密钥的位置。例如,您的查询可能是:

INSERT INTO `gerechten` (`name`, `price`, `menu_id`) 
VALUES  (:name, :price, :menuid)
ON DUPLICATE KEY UPDATE 
    name = :name, 
    price = :price

name AND menu_id上有唯一索引。 (我相信只要它在不同的菜单中就可以有几次同名)

当然,如果有各种字段组合必须是唯一的,这是一个有问题的情况,也许您应该使用不同的方法,例如select ... lock语句来检查以前是否存在正在编辑的值。

答案 1 :(得分:0)

您需要在gerech_naam列和/或gerech_prijs添加UNIQUE key(您可以在两列中定义行的唯一性)。

如果您要在表格中实现这些唯一键,则必须注意您仍然会遇到问题,因为如果您更改数据库中的名称或价格,可能会insert因为数据你提供的表格中不存在。