簡體   English   中英

在MySQL中復制表格

[英]Replicate table in MySQL

我對如何復制表一無所知。 但這是我的問題,我有5列的table_1並有數據,然后有10列的table_2卻無數據。 table_1中的所有列在table_2中是相同的,這意味着table_1中的5個列在table_1中是相同的,因此我想將其他5列從table_2復制到table_1,但不會影響table_1上的數據。 我怎樣才能做到這一點? 預先感謝。

表格1 表格1

table_2 在此處輸入圖片說明

table_1上的預期輸出 table_1上的預期輸出

這是您可以在表及其中所有信息上進行復制/復制的方法。

  1. 選擇你的桌子
  2. 點擊“操作”標簽
  3. 轉到“將表復制到(database.table):
  4. 選擇並填寫適當的信息。

您可以將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM