2017-07-28 4 views
0

"id"(INT)、 "property"(VARCHAR)、 "value"(VARCHAR)の3つの列を持つ単純なMySQLテーブルがあります。2つの列がデータと一致する場合はMySQLの更新レコード、そうでない場合は行を挿入します

すべての列が同じレコード(つまり、同じIDを持つ複数のレコード)を持つことができなければなりません。

アイデアは、異なるIDに一致するさまざまなプロパティを保存することです。

私の質問は、データがIDとプロパティの両方に一致する場合、どのようにレコードを更新するのですか?それ以外の場合は新しいレコードを追加しますか?

私は当初ON DUPLICATE KEYを使用することを考えましたが、私の列は一意ではないので、これは機能しません。

はここで希望の動作の例です:

1:私は、このテーブルで始まっ:

+----+----------+-------+ 
| id | property | value | 
+----+----------+-------+ 
| 45 | money | 500 | 
+----+----------+-------+ 

2:id = 45, property = sex, value = maleを、そして私が手に:私はその後、挿入

+----+----------+-------+ 
| id | property | value | 
+----+----------+-------+ 
| 45 | money | 500 | 
| 45 | sex  | male | 
+----+----------+-------+ 

3:次に、id = 45, property = money, value = 600を挿入します。

+----+----------+-------+ 
| id | property | value | 
+----+----------+-------+ 
| 45 | money | 600 | 
| 45 | sex  | male | 
+----+----------+-------+ 

4:id = 46, property = money, value = 600、およびget:最後に、私はこれを行うことができます

+----+----------+-------+ 
| id | property | value | 
+----+----------+-------+ 
| 45 | money | 600 | 
| 45 | sex  | male | 
| 46 | money | 600 | 
+----+----------+-------+ 
+0

可能性のある重複した[存在する場合は、MySQLのテーブルにINSERTまたはUPDATE](https://stackoverflow.com/questions/4205181/insert-into-a-mysql-table-or-up存在する場合は存在する) –

答えて

0

あなたのロジックは、そのid、すでにpropertyテーブルに表示される新しいレコードを挿入しようとすると、代わりに起こす必要があることを意味し、そのレコードの更新される値。 MySQLはこれを行う方法を提供します。あなたが試すかもしれないユニーク制約でゼロからあなたのテーブルを作成したい場合は

INSERT INTO yourTable (id, property, value) 
VALUES (45, 'money', 600) 
    ON DUPLICATE KEY UPDATE value = 600; 

:次に

ALTER TABLE yourTable ADD UNIQUE idx (id, property); 

このコードを使用して挿入を実行します。まずidpropertyカラムにユニーク制約を追加この:の

CREATE TABLE yourTable (
    id int NOT NULL, 
    property varchar(255) NOT NULL, 
    value int, 
    CONSTRAINT uc_idp UNIQUE (id, property) 
); 
+0

素晴らしい!テーブルの作成時にこの制約をどのように追加しますか? – Fillipuster

関連する問題