当前位置: 首页 > 面试题库 >

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

艾嘉石
2023-03-14
问题内容

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

脚本行: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, '', '');

如果根本不存在这样的问题,我很乐意将其作为答案并继续使用我当前的解决方法。


问题答案:

您当前的技术似乎很实用。只是一个小小的改变。

您可以仅导出模式,进行比较并找出所有表中所有缺少的列,而不必等待错误然后一个接一个地创建列。

这样一来,工作量就会减少。

您的gui将能够仅导出架构,否则mysqldump上的以下开关将有助于找出所有缺少的列。

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

区别dbdump1.sql和dbdump2.sql将为您提供这两个数据库的所有差异。



 类似资料:
  • 我有一个json看起来像这样: 如您所见,loc对象有时是json对象,有时是双数组。在不编写自定义反序列化程序的情况下,有没有办法避免,并在loc对象是json对象而不是双数组时将其设置为null。

  • 问题内容: 使用PMD,如果要忽略特定的警告,则可以使该行被忽略。 FindBugs有类似的东西吗? 问题答案: FindBugs的初始方法涉及XML配置文件(也称为过滤器)。这确实不如PMD解决方案方便,但是FindBugs只能在字节码上工作,而不能在源代码上工作,因此注释显然不是一个选择。例: 但是,为解决此问题,FindBugs稍后引入了另一个基于注释的解决方案(请参阅参考资料),您可以在类

  • 问题内容: 是否有可能以某种方式忽略此错误?我发现将自己不想运行的代码放在前面比注释它要容易得多(当注释重叠并且表现不佳时)… 问题答案: 否。这是编译时错误。因此,在运行课程之前,您 必须 摆脱它。 我通常要做的是在其前面放置一个虚假陈述。就像是: 使用此代码,您将不会出错。您将得到想要的东西。

  • 在加载时,Spring容器初始化bean。。。当它发现与Bean相关的错误时,它会停止并回滚(不是确切的术语)。。。我知道。 这是我们的条件。我们正在开发一种网络应用系统。(它很大)有几千个Spring bean。我们的客户要求如下。“在WAS重启过程中,即使一个或几个Bean有问题(加载时错误),忽略这些,系统必须继续......” 我们已经通过修改Spring的源代码满足了这个要求。。。但我认

  • 我可以在写入之前读取表,并在写入新行之前删除匹配行。 阅读后,我可以筛选应用程序中的行。 我不喜欢这两个解决方案,因为它们似乎太复杂了,性能是一个很大的问题。有更好的办法吗?

  • 我正在尝试创建一个通用的绑定文件,在多个项目中从WSDLs/XSD生成一致的Java类。我们通过(由@lexicore制作)生成代码。 问题在于多项目部分。如果特定的绑定指令与提供的XSD或WSDL中的任何内容都不匹配,则类生成失败 对“