[英]Replicate table in MySQL
這是您可以在表及其中所有信息上進行復制/復制的方法。
您可以將insert與ON DUPLICATE KEY UPDATE
一起使用,這將更新現有行。 但是,這基於唯一的鍵約束起作用。 這意味着您將必須創建約束或更新現有約束。
它確實要求5列中存在唯一數據。 這樣,當插入來自table_2的行並且違反唯一約束時,它將更新行而不是完成插入。
ALTER TABLE table_1
ADD UNIQUE INDEX ix_unique (col_1, col_2, col_3, col_4, col_5);
INSERT INTO table_1(col_1, col_2, col_3, col_4, col_5,
col_6, col_7, col_8, col_9, col_10)
SELECT t.col_1, t.col_2, t.col_3, t.col_4, t.col_5,
t.col_6, t.col_7, t.col_8, t.col_9, t.col_10
FROM table_2 t
ON DUPLICATE KEY UPDATE col_6 = t.col_6, col_7 = t.col_7, col_8 = t.col_8, col_9 = t.col_9, col_10 = t.col_10;
INSERT INTO ... SELECT FROM ...重復鍵更新
我能夠在mysql 5.7上重現它,並且從5.5開始就已經看到了此功能。
這是我運行的腳本。
CREATE TABLE IF NOT EXISTS `table_1` (
`col_1` int(10) unsigned NULL,
`col_2` int(10) unsigned NULL,
`col_3` int(10) unsigned NULL,
`col_4` int(10) unsigned NULL,
`col_5` int(10) unsigned NULL,
`col_6` int(10) unsigned NULL,
`col_7` int(10) unsigned NULL,
`col_8` int(10) unsigned NULL,
`col_9` int(10) unsigned NULL,
`col_10` int(10) unsigned NULL,
UNIQUE INDEX ix_unique (col_1, col_2, col_3, col_4, col_5)
);
CREATE TABLE IF NOT EXISTS `table_2` (
`col_1` int(10) unsigned NULL,
`col_2` int(10) unsigned NULL,
`col_3` int(10) unsigned NULL,
`col_4` int(10) unsigned NULL,
`col_5` int(10) unsigned NULL,
`col_6` int(10) unsigned NULL,
`col_7` int(10) unsigned NULL,
`col_8` int(10) unsigned NULL,
`col_9` int(10) unsigned NULL,
`col_10` int(10) unsigned NULL
);
INSERT INTO table_1 (`col_1`, `col_2`, `col_3`, `col_4`, `col_5`)
VALUES
(1, 1, 1, 1, 1),
(2, 2, 2, 2, 2),
(3, 3, 3, 3, 3),
(4, 4, 4, 4, 4),
(5, 5, 5, 5, 5),
(6, 6, 6, 6, 6),
(7, 7, 7, 7, 7),
(8, 8, 8, 8, 8),
(9, 9, 9, 9, 9),
(10, 10, 10, 10, 10);
INSERT INTO table_2 (`col_1`, `col_2`, `col_3`, `col_4`, `col_5`, `col_6`, `col_7`, `col_8`, `col_9`, `col_10`)
VALUES
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
(2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
(3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
(4, 4, 4, 4, 4, 4, 4, 4, 4, 4),
(5, 5, 5, 5, 5, 5, 5, 5, 5, 5),
(6, 6, 6, 6, 6, 6, 6, 6, 6, 6),
(7, 7, 7, 7, 7, 7, 7, 7, 7, 7),
(8, 8, 8, 8, 8, 8, 8, 8, 8, 8),
(9, 9, 9, 9, 9, 9, 9, 9, 9, 9),
(10, 10, 10, 10, 10, 10, 10, 10, 10, 10);
INSERT INTO table_1(col_1, col_2, col_3, col_4, col_5,
col_6, col_7, col_8, col_9, col_10)
SELECT t.col_1, t.col_2, t.col_3, t.col_4, t.col_5,
t.col_6, t.col_7, t.col_8, t.col_9, t.col_10
FROM table_2 t
ON DUPLICATE KEY UPDATE col_6 = t.col_6, col_7 = t.col_7, col_8 = t.col_8, col_9 = t.col_9, col_10 = t.col_10;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.