【问题标题】:Select Insert Query by mentioning all columns across databases通过提及跨数据库的所有列来选择插入查询
【发布时间】:2016-02-17 11:56:19
【问题描述】:

我正在重新设计旧数据库,并且已为旧数据库的列设置了新名称。例如,如果dbold 下的olddb.oldtabledescr 列,我在新的newdb.netable 列中将其设置为description

如何在查询中提及个别列?

我正在使用 MYSQL

更新:两个数据库位于不同的 IP 地址上,我正在使用 Navicat 传输数据。

【问题讨论】:

  • “提及”是什么意思?我希望你能跟踪所有这些变化。
  • @LorenzMeyer Qs 已更新。
  • 这个运气好吗?如果您找到解决方案,请发布,因为我也对此感兴趣。

标签: mysql database data-migration


【解决方案1】:

您可以一次插入所有列,而无需提及名称:

INSERT INTO newtable (SELECT * FROM oldtable);

它将独立于列名进行 1x1 匹配。

如果类型不匹配,则插入默认值(不检查所有类型组合)。

注意,两个表的列号必须相同,否则会出现这样的错误:

 #1136 - Column count doesn't match value count at row 1

【讨论】:

  • 请记住两个数据库表中的列名不同
  • 说到类型匹配,如果一列是int,另一列是tinyint,就不行了?
  • 它会起作用,但默认值为 0。即使一列是时间戳,另一列是 int,它也会起作用(但我没有检查所有组合)。
  • 我收到错误Error : Table 'olddb.table' doesn't exist。我正在我的 Db 客户端(Navicat pro)中尝试这个
  • 嗯,'table' 是 MySQL 的保留字。尝试使用反引号。
【解决方案2】:

你可以这样试试:

INSERT INTO newtable (col1, col2, ..., )
SELECT col1, col2, ..., FROM oldtable

通过尝试上述查询,您可以插入特定列。因此,例如,如果您的新表有一个列作为描述,旧表作为描述,那么您可以像这样提及它:

INSERT INTO newtable (col1, col2, `description`,  ..., )
SELECT col1, col2, `descr` ,..., FROM oldtable

此外,如果表格列列表很大,并且您想要复制所有列及其数据,那么您可以简单地使用通配符 * 为:

INSERT INTO newtable
SELECT * FROM oldtable;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 2017-09-17
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多