2016-03-23 3 views
0

Ist es möglich, nur ein einzelnes Feld mit ON DUPLICATE KEY UPDATE in einer Tabelle mit mehreren Feldern zu aktualisieren?Ist es möglich, nur ein einzelnes Feld mit ON DUPLICATE KEY UPDATE in einer Tabelle mit mehreren Feldern zu aktualisieren?

Wenn ich eine Tabelle mit drei Feldern habe; Schlüssel, Katzen, Hunde wo Schlüssel der Primärschlüssel ist, ist es möglich, einen Datensatz auf doppelten Schlüssel zu aktualisieren, nur ein Feld zu ändern (für mein Beispiel cats), ohne den Wert in den anderen Nicht-Schlüsselfeldern zu ändern (dogs). Dies ist, ohne zu wissen, was den Wert von dogs von außerhalb der Datenbank zum Zeitpunkt des Einsetzens (dh ich habe einen Wert variable Halt Katzen, aber nicht ein Halt Hund Wert)

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

Im Moment, wenn ich etwas laufen so und der Schlüssel bereits in der Tabelle existiert dogs ist auf NULL gesetzt, auch wenn es zuvor einen Wert hatte.

+1

Das Verhalten, das Sie beschreiben, ist nicht korrekt. Nur die Spalten in der 'update'-Klausel sollten von dieser Abfrage betroffen sein. –

+0

Hallo Gordon, danke dir - du hast mich dazu gebracht, mein eigenes Beispiel zu testen, anstatt den Produktionscode und du hast Recht. Zurück zum Zeichenbrett auf meinem Problem. Danke für die Bewertung –

Antwort

1

Gordon Recht, es ist nicht die Art und Weise funktioniert I beschrieben. Wenn Sie dies sehen, wird es nicht durch die ON DUPLICATE UPDATE-Anweisung, sondern etwas anderes verursacht. Hier ist der Beweis:

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`) 
) 

Der Lauf

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

Dann

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

laufen dann überprüfen Sie die Tabelle

0

Ich denke, Sie sollten versuchen, UPSERT.

Bitte prüfen dies:

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

MySQL UPSERT

Verwandte Themen