Es sollte keinen Unterschied machen, es ist die gleiche Syntax. Stellen Sie nur sicher, dass Sie beide Schlüssel als Spalten angegeben haben. Zum Beispiel:
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
BEARBEITEN
Hier ist mein Test, den ich in meiner Testdatenbank durchgeführt habe, um sicherzustellen, dass ich Ihre Daten nicht zerstören wollte. Natürlich ermutige ich Sie, es auszuprobieren, wenn Sie sich nicht sicher sind!
CREATE SCHEMA `my_testdb`;
USE `my_testdb`;
CREATE TABLE `my_table` (
`key1` VARCHAR(20) NOT NULL,
`key2` INTEGER NOT NULL,
`othercolumn1` VARCHAR(50),
CONSTRAINT PRIMARY KEY (`key1`, `key2`) );
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` )
VALUES ( 'widgets', 14, 'Green widget with fuchsia trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` )
VALUES ( 'widgets', 15, 'Yellow widget with orange trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` )
VALUES ( 'thingamabobs', 14, 'Red widget with brown trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
SELECT * FROM `my_table`;
Das ist mein Ergebnis:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
WEITERE BEARBEITUNG
Ich glaube, ich sehe, wovon Sie in der Dokumentation sprechen, die Verwirrung über eindeutige Spalten:
Das bezieht sich auf einen ziemlich erfundenen Umstand, bei dem die Zeile, durch die Sie ersetzen, nicht nur mit einem vorhandenen Primärschlüssel, sondern auch mit anderen eindeutigen Spalten in Konflikt steht. Hier ist ein weiteres Beispiel, um diesen Punkt zu veranschaulichen:
CREATE SCHEMA `my_testdb2`;
USE `my_testdb2`;
CREATE TABLE `my_table` (
`key1` VARCHAR(20) NOT NULL,
`key2` INTEGER NOT NULL,
`color` VARCHAR(20) NOT NULL UNIQUE,
`othercolumn1` VARCHAR(50),
CONSTRAINT PRIMARY KEY (`key1`, `key2`) );
REPLACE INTO `my_table` ( `key1`, `key2`, `color`, `othercolumn1` )
VALUES ( 'widgets', 14, 'green', 'Green widget with fuchsia trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `color`, `othercolumn1` )
VALUES ( 'widgets', 15, 'yellow', 'Yellow widget with orange trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `color`, `othercolumn1` )
VALUES ( 'thingamabobs', 14, 'red', 'Red widget with brown trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `color`, `othercolumn1` )
VALUES ( 'widgets', 14, 'yellow', 'Yellow widget with purple trim' );
SELECT * FROM `my_table`;
Beachten Sie, dass die letzte REPLACE-Operation nicht nur mit der (key1
, key2
) Primärschlüssel, des ersten REPLACE, aber auch mit der eindeutigen Farbe des zweiten. In diesem Fall werden BEIDE Zeilen gelöscht, bevor die letzte REPLACE-Operation ausgeführt wird, sodass das Ergebnis kein Konflikt ist. Am Ende haben Sie nur noch zwei Zeilen:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Sowohl die Zeile mit (key1
, key2
) gleich ('widgets', 14) AND Die Zeile mit der Farbe „Gelb“ wurde weggeblasen, da die neue Zeile mit mehreren eindeutigen Einschränkungen in der Tabelle in Konflikt stand.
Hoffe, das hilft!