我使用MySQL GUI通过选择某些表并将从备份转储生成的INSERT
语句运行到空表(新模式)中,将某些站点迁移到新版本的CMS。有在不新一个存在的旧表数列,所以脚本这样的错误停止:在“字段列表”有没有办法忽略INSERT上不存在的列?
脚本行
樱桃挑选所需的列导出,或编辑转储文件将是太繁琐和耗时。要解决这个问题,我会在生成错误时创建未使用的列,通过运行查询导入数据,然后在完成该表时删除未使用的列。我看过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, '', '');
如果这样的事情是不存在的,我很乐意接受,作为一个答案,并继续使用我目前的解决方法。
如果字段列表提到不存在的列,它可能包含偶然匹配的列。无论你知道什么,它可能是表名是错误的,使你无意中在无效的表中插入无效的数据。这是一个非常糟糕的主意。如果插入错误,让它失败。 – GolezTrol
如果使用不当或“意外”,有很多危险的查询是危险的,我不明白为什么这会是任何异常。 –
当然,但查询中不存在的列表示直接错误,并且会失败。 INSERT也不例外。 SELECT查询也会失败。 – GolezTrol