回答

收藏

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

技术问答 技术问答 429 人阅读 | 0 人回复 | 2023-09-14

我正在使用MySQL GUI,选择一些表并将INSERT从备份转储生成的句子运行到空表(新模式),以将某些站点迁移到空表(新模式)CMS新版本。新表中不存在旧表中的几列,因此脚本会因以下错误而停止:
3 z; u4 D! }7 m9 ^5 P7 d脚本行: 字段列表中的未知列user_id”9 K8 ?' l5 ?9 v
选择要导出的所需列,或编辑存储文件将非常无聊和耗时。为了解决这个问题,我将在生成错误时创建未使用的列,通过操作查询导入数据,然后在处理表后删除未使用的列。我已经看过了INSERTIGNORE,但这似乎是为了忽略重复键(不是我要找的)。6 F* ?& b1 @0 h+ f( a
有什么办法可以?INSERT在忽略目标表中不存在的列时执行一次?我正在寻找无痛的东西,比如一些现有的东西SQL功能。( a. [+ O( V. t- a
为了澄清,我正在处理大量备份文件,将数据导入当地数据库进行测试,然后将其移动到实时服务器中。我想要的解决方案的例子:: }/ q0 y/ E4 y5 n' _
-- 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  ,,,,如果根本没有这样的问题,我愿意把它作为答案,继续使用我目前的解决方案。
/ i8 Q" O" ]/ Y+ ?: k! J                                                               
4 S% C3 |1 G% @$ X7 n: y    解决方案:                                                                * Q1 n2 O  L' r' E) [2 e! P; N
                                                                你目前的技术似乎很实用。这只是一个小小的变化。
  C% @+ u0 I2 M$ j您只能导出模式,比较并找出所有表中缺失的列,而不必等待错误,然后一个接一个地创建列。/ S' p$ B. D7 M3 r
这样,工作量就会减少。
6 k6 E) ]( \( B+ w! r8 G1 p) r: N) p您的gui它只能导出架构,否则mysqldump上下开关将有助于找出所有缺失的列。5 y$ u$ U" U& Q
mysqldump --no-data -uuser -ppassword --database dbname1 > dbdump1.sqlmysqldump --no-data -uuser -ppassword --database dbname2 > dbdump2.sql区别dbdump1.sql和dbdump2.sql这两个数据库的所有差异都将为您提供。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则