Não deve fazer diferença, é a mesma sintaxe. Apenas certifique-se de ter ambas as chaves especificadas como colunas. Por exemplo:
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
EDITAR
Aqui está o meu teste que executei no meu banco de dados de teste para ter certeza de que não estava prestes a destruir seus dados. Claro, eu encorajo você a experimentá-lo se não tiver certeza!
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`;
Este é o meu resultado:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
OUTRA EDIÇÃO
Acho que vejo o que você está falando na documentação, a confusão sobre colunas únicas:
Isso está se referindo a uma circunstância bastante artificial na qual a linha que você está substituindo entra em conflito não apenas com uma chave primária existente, mas também com outras colunas exclusivas. Aqui está outro exemplo para ilustrar este ponto:
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`;
Observe como a última operação REPLACE não só entra em conflito com (
key1
, key2
) chave primária, da primeira REPLACE, mas também com a cor única da segunda. Nesse caso, BOTH linhas são excluídas antes que a última operação REPLACE seja executada para que o resultado não seja um conflito. Você terminará com apenas duas linhas:key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Tanto a linha com (
key1
, key2
) igual a ('widgets', 14) E a linha com a cor 'amarelo' foi destruída devido à nova linha entrar em conflito com várias restrições exclusivas na tabela. Espero que isto ajude!