Det borde inte göra någon skillnad, det är samma syntax. Se bara till att du har båda nycklarna angivna som kolumner. Till exempel:
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
REDIGERA
Här är mitt test som jag körde i min testdatabas för att se till att jag inte var på väg att förstöra din data. Självklart uppmuntrar jag dig att prova om du är osäker!
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`;
Detta är mitt resultat:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
ANN REDIGERING
Jag tror att jag ser vad du pratar om i dokumentationen, förvirringen över unika kolumner:
Det syftar på en ganska konstruerad omständighet där raden du ersätter med inte bara konflikter med en befintlig primärnyckel, utan också med andra unika kolumner. Här är ett annat exempel för att illustrera denna 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`;
Lägg märke till hur den senaste REPLACE-operationen inte bara kommer i konflikt med (key1
, key2
) primärnyckel, för den första REPLACE, men också med den unika färgen för den andra. I det här fallet raderas BÅDA raderna innan den sista REPLACE-operationen utförs så att resultatet inte blir någon konflikt. Du kommer att sluta med bara två rader:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Både raden med (key1
, key2
) lika med ('widgets', 14) OCH raden med färgen "gul" blåstes bort på grund av att den nya raden stod i konflikt med flera unika begränsningar på bordet.
Hoppas detta hjälper!