【问题标题】:Replicate table in MySQL在 MySQL 中复制表
【发布时间】:2016-05-16 01:58:04
【问题描述】:

我不知道如何复制表。但这是我的问题,我的 table_1 有 5 列并且上面有数据,然后我有 table_2 有 10 列但上面没有数据。 table_1 中的所有列在 table_2 中都是相同的,这意味着 table_2 中只有 5 列在 table_1 中相同,所以我想将其他 5 列从 table_2 复制到 table_1,但它不会影响 table_1 上的数据。我怎样才能做到这一点?提前致谢。

table_1

table_2

table_1的预期输出

【问题讨论】:

  • 您能向我们展示table_1table_2 的样本数据,以便清楚吗?这两个表有什么关系?
  • @renmark,没有。我想我需要将一些列从 table_2 复制到 table_1
  • @TimBiegeleisen,我打印屏幕表格
  • 噢。对不起。我现在知道了。因此 table_1 将具有与 table_2 相同的列,但不会影响数据。我将上传输出图像。

标签: mysql database multiple-columns replication


【解决方案1】:

这是复制/复制表格及其中所有信息的方法。

  1. 选择您的餐桌
  2. 点击“操作”标签
  3. 转到“将表复制到(database.table):
  4. 选择并填写相应的信息。

【讨论】:

  • 我收到了这个错误。 “表 table_1 已存在”。我想将table_2中的列复制到table_1,我的意思是col_5到col_10。
【解决方案2】:

您可以将插入与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 ... ON DUPLICATE KEY UPDATE

编辑

我能够在 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;

【讨论】:

  • 当我尝试你的代码时,这是输出:无法识别的关键字。 (位置 236 的“ON”附近)无法识别的关键字。 (在位置 239 的“DUPLICATE”附近)无法识别的关键字。 (在位置 249 的“KEY”附近)之前发现了一个别名。 (在位置 268 的“t”附近)之前发现了一个别名。 (在位置 270 的“col_6”附近)之前发现了一个别名。 (在位置 285 的“t”附近)之前发现了一个别名。 (在位置 287 的“col_7”附近)之前发现了一个别名。 (靠近位置 302 的“t”).....
  • @DunhillDimaapi:我添加了重现步骤,看看是否有助于澄清。不确定您运行的是哪个版本的 mysql,但这是 mysql 的特定功能,问题用 mysql 标记。
  • 是的。也许我的mysql没有更新。但无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-10-18
  • 2017-11-28
  • 1970-01-01
  • 2011-02-21
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多