1

我有一张桌子(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
4

2 回答 2

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检查正在编辑的值是否存在的语句。

于 2013-03-18T19:23:03.690 回答
0

您需要向列和/或添加一个UNIQUE键您可以让两列定义行的唯一性)。gerech_naamgerech_prijs

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

于 2013-03-18T19:22:24.463 回答