Nó không tạo ra sự khác biệt, đó là cùng một cú pháp. Chỉ cần đảm bảo rằng bạn có cả hai khóa được chỉ định dưới dạng cột. Ví dụ:
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
CHỈNH SỬA
Đây là thử nghiệm của tôi, tôi đã chạy trong cơ sở dữ liệu thử nghiệm của mình để đảm bảo rằng tôi không phá hủy dữ liệu của bạn. Tất nhiên, tôi khuyến khích bạn nên dùng thử nếu bạn không chắc chắn!
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`;
Đây là kết quả của tôi:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
CHỈNH SỬA KHÁC
Tôi nghĩ rằng tôi thấy những gì bạn đang nói trong tài liệu, sự nhầm lẫn giữa các cột duy nhất:
Điều đó đề cập đến một trường hợp khá phức tạp trong đó hàng bạn đang thay thế có xung đột không chỉ với khóa chính hiện có mà còn với các cột duy nhất khác. Đây là một ví dụ khác để minh họa điểm này:
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`;
Lưu ý rằng thao tác REPLACE cuối cùng không chỉ xung đột với (key1
, key2
) khóa chính, của REPLACE đầu tiên, nhưng cũng có màu duy nhất của khóa thứ hai. Trong trường hợp này, CẢ HAI hàng sẽ bị xóa trước khi thao tác REPLACE cuối cùng được thực hiện để kết quả không có xung đột. Bạn sẽ chỉ có hai hàng:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
Cả hàng có (key1
, key2
) bằng ('widget', 14) VÀ hàng có màu 'vàng' đã bị thổi bay do hàng mới xung đột với nhiều ràng buộc duy nhất trên bảng.
Hy vọng điều này sẽ hữu ích!