因此,在这种情况下,我将多次获得整个数据库架构。但是每次表结构可能与前一个结构略有不同。既然我已经有数据了,有没有办法写一个查询与现有表进行比较,而只添加新列呢?
例如,我的数据库中已经有了该表。
CREATE TABLE `Ages` (
`AgeID` int(11) DEFAULT NULL,
`AgeName` varchar(32) DEFAULT NULL,
`AgeAbbreviation` varchar(13) DEFAULT NULL,
`YouthAge` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在新的架构中,我具有相同的表,但具有不同的列。
CREATE TABLE `Ages` (
`AgeID` int(11) DEFAULT NULL,
`AgeName` varchar(32) DEFAULT NULL,
`AgeAbbreviation` varchar(13) DEFAULT NULL,
`YouthAge` varchar(15) DEFAULT NULL,
`AgeLimit` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在这种情况下,列AgeLimit
将添加到现有表中。
答案 0 :(得分:0)
您应该可以通过查看元数据表(information_schema)中的表定义来做到这一点。
答案 1 :(得分:0)
information_schema
数据库查看现有模式。 alter table
语句但是我认为,这在后端nodejs服务器上要容易得多,因为您也可以从nodejs轻松地执行步骤1和2(实际上只是查询一堆表),并且您有更多的可能性来计算差异,创建并执行适当的查询。
编辑1
如果没有从新架构创建临时数据库的可能性,则必须寻找其他方法从中提取信息。我怀疑您的SQL脚本带有(其中包括)一堆CREATE TABLE ...
语句,因为这通常是mysqldump
创建的。因此,您必须解析此脚本。同样,即使在MySQL存储过程中,这在javascript中似乎也更容易。如果您的架构与示例一样结构合理,那么实际上仅是几行代码。
编辑2
也许您可以从这里得到一些启发:Compare two MySQL databases提到了一些在数据库之间进行同步的工具。