所以MySQL的REPLACE命令(不要與字符串混淆替換功能),如果存在與所插入的數據相同的主鍵列代替行...MySQL的REPLACE查詢有多個主鍵
但如果我有兩個主鍵,並且我想同時使用這兩個指定行來替換它們中的一個......我如何指定mysql使用兩個鍵而不僅僅是一個
所以MySQL的REPLACE命令(不要與字符串混淆替換功能),如果存在與所插入的數據相同的主鍵列代替行...MySQL的REPLACE查詢有多個主鍵
但如果我有兩個主鍵,並且我想同時使用這兩個指定行來替換它們中的一個......我如何指定mysql使用兩個鍵而不僅僅是一個
它不應該使不同的是,它是相同的語法。只要確保你有兩個鍵指定爲列。例如:
REPLACE INTO `my_table` (`key1`, `key2`, `othercolumn1` /* , ... */)
VALUES ('widgets', 14, 'Blue widget with purple trim');
編輯
這裏是我的測試,我在我的測試數據庫運行,以確保我是不是要破壞你的數據。當然,如果你不確定,我鼓勵你嘗試一下!
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`;
這是我的結果:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
ANOTHER編輯
我想我明白你的文檔中說些什麼,混亂了獨特的列:
如果表con是單行可以替換多箇舊行保留了多個唯一索引,並且新行爲不同的唯一索引中的不同舊行重複了值。 - MySQL文檔
這是指在該行你與衝突不僅與現有的主鍵,但與其他唯一列替換,以及一個虛構的情節。這裏還有一個例子來說明這一點:
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`;
注意如何最後的替換操作不僅發生衝突與(key1
,key2
)主鍵,第一代替,但也與第二個獨特的顏色。在這種情況下,在執行最後一次REPLACE操作之前刪除BOTH行,以使結果不衝突。你會只用兩行結束:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
都與(key1
,key2
)等於(「小部件」,14)和與色列行「黃」被吹走因到與表格上的多個唯一約束衝突的新行。
希望這會有所幫助!
是真的......我的理解是,如果多個鍵中的任何一個都重複,REPLACE將會被替換....我想要的方式是,如果兩個鍵都是重複的,而不僅僅是其中的一個。 ..糾正我,如果我錯了 – pillarOfLight
是的,這是真的。我只是在我創建的測試數據庫上運行它以確保我沒有誤解,並且它只替換了兩列匹配的值,而不是/或。如有疑問,請旋轉! –
@ user841626:我也是這樣閱讀文檔的。儘管如此,你可能只需要測試它看看它是如何表現的。 – Flimzy
根據定義,表格只能有一個PK。你的意思是獨特的鑰匙? – Jason
我很確定他的意思是一個多列主鍵。 –
你不能有兩個主鍵。你的意思是你有一個複合主鍵? – Flimzy