mysql - 有没有办法忽略 INSERT 中不存在的列?

标签 mysql sql

我正在使用 MySQL GUI通过选择某些表并将从备份转储生成的 INSERT 语句运行到空表(新模式)中,将某些站点迁移到新版本的 CMS。旧表中有几列在新表中不存在,因此脚本停止并出现如下错误:

Script line: 1 Unknown column 'user_id' in 'field list'

挑选要导出的所需列或编辑转储文件将过于繁琐且耗时。为了解决这个问题,我在生成错误时创建未使用的列,通过运行查询导入数据,然后在完成该表时删除未使用的列。我看过 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, '', '');

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

最佳答案

您目前的技术似乎足够实用。只是一个小的变化。

无需等待错误然后一一创建列,您只需导出架构、进行差异比较并找出所有表中所有缺失的列。

这样工作量会减少。

您的 gui 将能够仅导出模式,或者 mysqldump 上的以下开关将有助于找出所有缺失的列。

mysqldump --no-data -uuser -ppassword --database dbname1 > dbdump1.sql
mysqldump --no-data -uuser -ppassword --database dbname2 > dbdump2.sql

比较 dbdump1.sql 和 dbdump2.sql 将为您提供两个数据库中的所有差异。

关于mysql - 有没有办法忽略 INSERT 中不存在的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704318/

相关文章:

php - 使用curl发送多个url短信

Python UPDATE 查询的参数位于不同位置

mysql - 在子查询中选择最大值

mysql - 可变 SQL 列默认值

Java:一种方法中顺序 SQL 语句的问题

mysql - 使用连接从 MySQL 数据库中选择 2 列

java - java中如何区分主键和唯一键约束

mysql - 如何强制 Mysql 在 IN 子句中使用主索引...?

sql - 如何查找多列中的重复项?

sql - 与外键数组相比,联结表的性能权衡?