Nemělo by to dělat rozdíl, je to stejná syntaxe. Ujistěte se, že máte oba klíče zadané jako sloupce. Například:
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
UPRAVIT
Zde je můj test, který jsem provedl ve své testovací databázi, abych se ujistil, že nehodlám zničit vaše data. Samozřejmě vám doporučuji, abyste to vyzkoušeli, pokud si nejste jisti!
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`;
Toto je můj výsledek:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
DALŠÍ ÚPRAVA
Myslím, že v dokumentaci chápu, o čem mluvíte, zmatek ohledně jedinečných sloupců:
To odkazuje na poněkud vykonstruovanou okolnost, ve které je řádek, který nahrazujete, v konfliktu nejen s existujícím primárním klíčem, ale také s jinými jedinečnými sloupci. Zde je další příklad pro ilustraci tohoto bodu:
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`;
Všimněte si, jak je poslední operace REPLACE nejen v konfliktu s (key1
, key2
) primární klíč, prvního REPLACE, ale také s jedinečnou barvou druhého. V tomto případě jsou OBA řádky odstraněny před provedením poslední operace REPLACE, takže výsledkem není žádný konflikt. Skončíte pouze se dvěma řádky:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Oba řádky s (key1
, key2
) rovno ('widgety', 14) A řádek se „žlutou“ barvou byl vyhozen, protože nový řádek byl v konfliktu s několika jedinečnými omezeními v tabulce.
Doufám, že to pomůže!