No debería hacer una diferencia, es la misma sintaxis Solo asegúrese de tener ambas claves especificadas como columnas. Por ejemplo:
REPLACE INTO `my_table` (`key1`, `key2`, `othercolumn1` /* , ... */)
VALUES ('widgets', 14, 'Blue widget with purple trim');
EDITAR
Aquí está mi prueba me encontré en mi base de datos de prueba para asegurarse de que no estaba a punto de destruir sus datos. ¡Por supuesto, te animo a que lo pruebes si no estás seguro!
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 es mi 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
otra edición
Me parece ver lo que está hablando en la documentación, la confusión sobre columnas únicas:
Es posible que una sola fila reemplace más de una fila anterior si la tabla contiene múltiples índices únicos y la nueva fila duplica valores para diferentes filas antiguas en diferentes índices únicos. - Documentación de MySQL
que se está refiriendo a una circunstancia bastante artificiales en el que la fila que está reemplazando a los conflictos no sólo con una clave principal existente, pero con otras columnas únicas. Aquí hay otro ejemplo para ilustrar este punto:
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`;
Note como la última operación de sustitución no sólo los conflictos con la clave principal (key1
, key2
), de la primera REEMPLAZAR, sino también con el color único de la segunda. En este caso, AMBAS filas se eliminan antes de realizar la última operación REEMPLAZAR para que el resultado no sea conflictivo. Usted va a terminar con sólo dos filas:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Tanto la fila con (key1
, key2
) igual a (widgets ', 14) Y la fila con el color 'amarillo' quedamos impresionados debido a la nueva fila en conflicto con múltiples restricciones únicas en la tabla.
Espero que esto ayude!
Una tabla, por definición, solo puede tener una única PK. ¿Te refieres a llaves únicas? – Jason
Estoy bastante seguro de que se refería a una clave primaria de múltiples columnas. –
No puede tener dos claves principales. ¿Quiere decir que tiene una clave primaria compuesta? – Flimzy