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キーを追加する必要があります(2つの列で行の一意性を定義できます)。gerech_naamgerech_prijs

これらの一意のキーをテーブルに実装する場合、名前または価格を変更すると、insert提供するデータがDBに存在しないため、DBに含まれる可能性があるため、問題が発生する可能性があることに注意する必要があります。テーブル。

于 2013-03-18T19:22:24.463 に答える