首页 > 解决方案 > Mysql:如何从另一个数据库表更新表结构?

问题描述

我有 2 个包含表的数据库:table1

DB1:table1: field1 field2 field3 field4 .. field99

DB2:表 2: 字段 1 字段 2 字段 3

(所以要手动添加 96 个新字段!)

我继续在 DB1 上的 table1 中添加新字段,例如:DB1.table1 现在有 99 个字段,DB2.table2 有 3 个字段

有没有办法在不删除数据或删除表的情况下“快速”更新 DB2.table,因此添加了 96 个新字段?(一种不丢失数据的结构同步)

我正在手动添加一个又一个字段是浪费时间。

标签: mysqlmariadb

解决方案


例子。

问题中提到了两个表。

我们执行:

SHOW CREATE TABLE table1;
SHOW CREATE TABLE table2;

并收到

CREATE TABLE `table1` (
  `field1` int DEFAULT NULL,
  `field2` char(2) DEFAULT NULL,
  `field3` datetime DEFAULT NULL,
  `field4` bit(1) DEFAULT NULL,
  -- .....
  `field99` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

CREATE TABLE `table2` (
  `field1` int DEFAULT NULL,
  `field2` char(2) DEFAULT NULL,
  `field3` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

我们删除了除描述 table1 中的列的行之外的所有行,这些行在任何文本编辑器中获取的 table2 中都不存在

  `field4` bit(1) DEFAULT NULL,
  -- .....
  `field99` int DEFAULT NULL

然后我们将 ALTER TABLE 行添加到开头,将 COLUMN 添加到每一行的开头并指定 INSTANT 操作。

ALTER TABLE table2
ADD COLUMN
  `field4` bit(1) DEFAULT NULL,
  -- .....
ADD COLUMN
  `field99` int DEFAULT NULL
, ALGORITHM=INSTANT;

就这样。可以执行。

小提琴样本


推荐阅读