Het zou geen verschil moeten maken, het is dezelfde syntaxis. Zorg er wel voor dat u beide sleutels als kolommen hebt opgegeven. Bijvoorbeeld:
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
BEWERKEN
Dit is mijn test die ik in mijn testdatabase heb uitgevoerd om er zeker van te zijn dat ik je gegevens niet zou vernietigen. Natuurlijk moedig ik je aan om het uit te proberen als je het niet zeker weet!
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`;
Dit is mijn resultaat:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
EEN ANDERE BEWERKING
Ik denk dat ik begrijp waar je het over hebt in de documentatie, de verwarring over unieke kolommen:
Dat verwijst naar een nogal gekunstelde omstandigheid waarin de rij die u vervangt niet alleen in conflict is met een bestaande primaire sleutel, maar ook met andere unieke kolommen. Hier is nog een voorbeeld om dit punt te illustreren:
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`;
Merk op hoe de laatste REPLACE-bewerking niet alleen conflicteert met de (key1
, key2
) primaire sleutel, van de eerste VERVANG, maar ook met de unieke kleur van de tweede. In dit geval worden BEIDE rijen verwijderd voordat de laatste REPLACE-bewerking wordt uitgevoerd, zodat het resultaat geen conflict is. Je krijgt uiteindelijk maar twee rijen:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Zowel de rij met (key1
, key2
) gelijk aan ('widgets', 14) EN de rij met de kleur 'geel' werd weggeblazen omdat de nieuwe rij in strijd was met meerdere unieke beperkingen op de tafel.
Ik hoop dat dit helpt!