Det burde ikke gøre en forskel, det er den samme syntaks. Bare vær sikker på at du har begge nøgler angivet som kolonner. For eksempel:
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
REDIGER
Her er min test, jeg kørte i min testdatabase for at sikre, at jeg ikke var ved at ødelægge dine data. Jeg opfordrer dig selvfølgelig til at prøve det, hvis du er i tvivl!
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`;
Dette er mit 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
END EN REDIGERING
Jeg tror, jeg kan se, hvad du taler om i dokumentationen, forvirringen over unikke kolonner:
Det refererer til en ret konstrueret omstændighed, hvor den række, du erstatter, ikke kun er i konflikt med en eksisterende primærnøgle, men også med andre unikke kolonner. Her er endnu et eksempel til at illustrere dette 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`;
Bemærk, hvordan den sidste REPLACE-operation ikke kun er i konflikt med (key1
, key2
) primær nøgle, af den første REPLACE, men også med den unikke farve af den anden. I dette tilfælde slettes BEGGE rækker, før den sidste REPLACE-operation udføres, så resultatet ikke er nogen konflikt. Du ender med kun to rækker:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Både rækken med (key1
, key2
) lig med ('widgets', 14) AND rækken med farven 'gul' blev blæst væk på grund af den nye række, der var i konflikt med flere unikke begrænsninger på bordet.
Håber dette hjælper!