mysql - 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 个新字段?(一种不丢失数据的结构同步)
我正在手动添加一个又一个字段是浪费时间。
解决方案
例子。
问题中提到了两个表。
我们执行:
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;
就这样。可以执行。
推荐阅读
- angular - 离子生成页面:找不到 NgModule
- android - 将图标添加到 TabItems
- c++ - 如何设置 Visual Studio 2017 以正确识别 Optix 项目中的 Cuda 代码
- python - opencv(cv2)在我的代码中检测运动的问题
- assembly - 为什么 .COM 程序中只有一个段,用于程序代码和堆栈?
- java - 使用expandAroundCenter函数的最长回文子串(LeetCode)解决方案,不是O(n ^ 3)吗?
- c - 我的程序无法正确输出行
- javascript - 文件何时完成流式传输到 AWS S3 上传 api 的事件侦听器?
- javascript - Console.log 不等待承诺
- bash - Bash:从文件名创建文件夹