2016-06-14 11 views
1

これは簡単に解決できると思いましたが、問題があります。私は自動インクリメントIDでテーブルにレコードを挿入しています。重複キーの更新では、私は自動増分IDを同じ(更新ではない)にしたいと思います。たとえば、のは、私は次の表を持っているとしましょう:重複キー更新時に自動インクリメントIDを更新しないようにするにはどうすればよいですか?

+-------------+-----------+------+ 
| ID   | Fruit  | Color| 
+-------------+-----------+------+ 
| 1   | Apple  | Red | 
| 2   | Apple  | Green| 
+-------------+-----------+------+ 

その後、私が実行します。

INSERT INTO table (Fruit, Color) VALUES(
    Apple, Red) 

私のユニークキー(果物、カラー)であるので(またIDは別のものです)、私が欲しいですテーブルが更新されたときにIDカラムがそのまま(ID = 1)残る。ただし、上記の値を挿入すると、IDは3に自動的にインクリメントされます。

誰かが更新時にID値が増加しないようにON DUPLICATE KEY UPDATEステートメントを提供できますか?

INSERT INTO table (Fruit, Color) VALUES(
    Apple, Red) 
ON DUPLICATE KEY UPDATE (
{statement here}) 
+0

MySQLはどのような値を挿入するのですか?また、私はここでトリガーが可能になるとは思わない。 –

答えて

1

ID列が続いセットの主キーを作成する必要があります(果物、カラー)ユニークなキーとして。次に、@Andrew B Anthonyが提供するクエリを以下のように実行することができます。

INSERT INTO table (Fruit, Color) VALUES 
    Apple, Red) 
ON DUPLICATE KEY UPDATE 
Fruit=values(Fruit), 
Color=values (Color) 
1

あなたは以下のクエリを使用することができますし、あなたの(果物、色)がある場合は、それが動作する一意のキー

INSERT INTO table (Fruit, Color) VALUES(Apple, Red) 
ON DUPLICATE KEY UPDATE 
Fruit=values(Fruit),Color=values (Color) 
+0

閉じる。 IDはプライマリキーでなければならず、(フルーツ、カラー)ユニークキー – ProgrammingWithRandy

+0

@ProgrammingWithRandy(フルーツ、カラー)がユニークなキーであれば動作します –

関連する問題