-1

私は次の表を持って働いていないと、テーブルを更新します。は複合キーが正しく

私はこのクエリを実行しようとしています:

INSERT INTO days (date, operating_time, bed) VALUES ('2016-11-07', 6.55, 1) ON duplicate key update operating_time=VALUES(operating_time); 

問題は、ベースのみ日付列上を更新しているようだということです。たとえば、ベッドの値が1の場合に上記のクエリを実行した後、ベッドの値が2の場合は、オリジナルのレコード(ベッド= 1の場合)

を実際に更新します。 ON DUPLICATE KEYステートメントで日付とベッド列の両方をチェックしますか?

CREATE TABLE `days` (
    `date` date NOT NULL, 
    `operating_time` float DEFAULT '0', 
    `bed` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`date`,`bed`), 
    UNIQUE KEY `date_UNIQUE` (`date`), 
    KEY `bed_idx` (`bed`), 
    KEY `date` (`date`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

これは正常に機能していますか? – barudo

+0

@barudo私はちょうど上記のような正確な構造を持つ完全に空白のテーブルでもう一度試しました。うまく行かなかった。 –

+0

再生できません。私のために期待どおりに動作します。 – Plutonix

答えて

0

UNIQUEキーが日付列のみで構成されていたことが明らかなため、テーブルの作成ステートメントを転記した後です。ベッド塔を追加した後、期待どおりに機能した。さまざまなタイプのキーを読んで、具体的にはUNIQUEキーに複合キーで使用される両方の列が含まれている必要があるのはなぜですか。

1

あなたは同じ日付が異なるbedINSERTをすれば、それは勝ったので、テーブルdaysは日にUNIQUE率を有している:ここでは

編集

は、テーブルのための文を作成していますUNIQUEのために挿入されません(そうでなければ、ユニークなインデックスに失敗します)。

同じbeddate(しかし異なるoperating_time)を挿入しようとすると、UPDATEが行われます。