有没有办法忽略INSERT上不存在的列?

Wes*_*rch 20 mysql sql

我正在使用MySQL GUI将某些站点迁移到新版本的CMS,方法是选择某些表并将INSERT从备份转储生成的语句运行到空表(新架构)中.旧表中有一些列不存在于新表中,因此脚本会停止,并显示如下错误:

脚本行:'字段列表'中有1个未知列'user_id'

樱桃选择要导出的所需列,或编辑转储文件将太繁琐和耗时.要解决这个问题,我会在生成错误时创建未使用的列,通过运行查询导入数据,然后在完成该表时删除未使用的列.我看过了INSERT IGNORE,但这似乎是为了忽略重复的键(不是我正在寻找的).

有没有办法预先形成INSERT一段时间忽略目标表中不存在的列?我正在寻找一些"无痛"的东西,就像一些现有的SQL功能一样.

为了澄清,我正在使用一堆备份文件并将数据导入本地数据库进行测试,然后再将其移动到实时服务器.我希望的解决方案的示例:

-- Don't try to insert data from columns that don't exist in "new_table"
INSERT INTO `new_table` {IGNORE UNKNOWN COLUMNS} (`id`, `col1`, `col2`) VALUES 
  (1, '', ''),
  (2, '', '');
Run Code Online (Sandbox Code Playgroud)

如果这样的事情根本不存在,我很乐意接受这个作为答案并继续使用我目前的解决方法.

小智 5

你现在的技术看起来很实用.只是一个小小的变化.

您可以只导出架构,执行差异并查找所有表中所有缺少的列,而不是等待错误然后逐个创建列.

这样就少了工作.

你的gui将能够导出只是架构或mysqldump上的以下开关将有助于找出所有缺少的列.

mysqldump --no-data -uuser -ppassword --database dbname1 > dbdump1.sql
mysqldump --no-data -uuser -ppassword --database dbname2 > dbdump2.sql
Run Code Online (Sandbox Code Playgroud)

扩展dbdump1.sql和dbdump2.sql将为您提供两个数据库的所有差异.