To nie powinno mieć znaczenia, to ta sama składnia. Tylko upewnij się, że masz oba klucze określone jako kolumny. Na przykład:
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
EDYTUJ
Oto mój test, który przeprowadziłem w mojej testowej bazie danych, aby upewnić się, że nie zamierzam zniszczyć twoich danych. Oczywiście zachęcam do wypróbowania tego, jeśli nie masz pewności!
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`;
Oto mój wynik:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
INNA EDYCJA
Myślę, że widzę, o czym mówisz w dokumentacji, zamieszanie związane z unikalnymi kolumnami:
Odnosi się to do dość wymyślonej okoliczności, w której wiersz, który zastępujesz, koliduje nie tylko z istniejącym kluczem podstawowym, ale także z innymi unikalnymi kolumnami. Oto kolejny przykład ilustrujący ten punkt:
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`;
Zwróć uwagę, że ostatnia operacja REPLACE nie tylko powoduje konflikt z (key1
, key2
) klucz podstawowy pierwszego REPLACE, ale także z unikalnym kolorem drugiego. W takim przypadku OBA wiersze są usuwane przed wykonaniem ostatniej operacji REPLACE, aby wynik nie powodował konfliktu. Otrzymasz tylko dwa rzędy:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Zarówno wiersz z (key1
, key2
) równe ('widgety', 14) ORAZ wiersz z kolorem „żółtym” został zdmuchnięty z powodu konfliktu nowego wiersza z wieloma unikalnymi ograniczeniami w tabeli.
Mam nadzieję, że to pomoże!