2016-03-23 9 views
0

複数のフィールドを持つテーブルでON DUPLICATE KEY UPDATEを使用して1つのフィールドのみを更新することはできますか?複数のフィールドを持つテーブルでON DUPLICATE KEY UPDATEを使用して1つのフィールドのみを更新することはできますか?

私は3つのフィールドを持つテーブルを持っています。 (dogs)の値を変更せずに、1つのフィールド(たとえば、cats)のみを変更して、重複キーのレコードを更新することができます。これは、私が何かを実行する瞬間(つまり私は、変数保持猫値を持っていますが、ない犬の値を保持する1)挿入時にデータベースの外部からdogsのどのような値を知らなくても

INSERT INTO `myTable` (`key`,`cats`) VALUES('someKey1','Manx') ON DUPLICATE KEY UPDATE `cats` = 'Manx'; 

ですこのようなキーは既にテーブルに存在していますdogsは以前に値があったとしてもNULLに設定されています。

+1

をチェックあなたが記述動作が正しくありません。 'update'句の中のカラムだけがこのクエリの影響を受けるべきです。 –

+0

こんにちはゴードン、ありがとうございました - 私は自分のサンプルを生産コードではなくテストしました。私の問題については、図面ボードに戻ってください。フィードバックありがとう –

答えて

1

ゴードンが正しいと、それは私が説明したように動作しません。これが表示されている場合は、ON DUPLICATE UPDATE文に起因するものではありません。ここでは証拠です:

CREATE TABLE IF NOT EXISTS `myTable` (
    `key` varchar(20) NOT NULL default '', 
    `cats` varchar(20) default NULL, 
    `dogs` varchar(20) default NULL, 
    PRIMARY KEY (`key`) 
) 

実行し

INSERT INTO `myTable` (`key`, `cats`, `dogs`) VALUES 
('someKey1', NULL, 'jack-russell'); 

INSERT INTO `myTable` (`key`,`cats`) VALUES 
('someKey1','Manx') ON DUPLICATE KEY UPDATE `cats` = 'manx'; 

を実行するには、次にテーブル

0

あなたはUPSERTを試みるべきだと思います。

これを検討してください:

INSERT INTO `item` (`item_name`, items_in_stock) VALUES('A', 27) 
ON DUPLICATE KEY UPDATE `new_items_count` = `new_items_count` + 27 

MySQL UPSERT

関連する問題