【问题标题】:Can I import an existing table automatically changing primary keys?我可以导入现有表自动更改主键吗?
【发布时间】:2017-08-21 02:55:27
【问题描述】:

我有一张关于我的服务器中来自我网站以前版本的权限的表格,我需要保留它们,但最新的网络应用程序版本有它自己的并且可能需要此表格中的基本配置。

因此,我需要将原版数据导入我的表(反之亦然,结果相同),而不覆盖或跳过现有的主键,这意味着自动将主键更新为其他未使用的主键。这可能吗?怎么样?

【问题讨论】:

  • 您能否将旧权限数据与新权限数据存储在不同的表中,还是需要将它们存储在同一个表中?您是否打算继续使用与以前相同的主键系统,或者这个最新的网络应用程序是否意味着您需要为新的网络应用程序启动一个新的主键系统?
  • 我需要将所有权限一起插入。 PK系统应该是一样的。
  • 主字段是自增字段吗?
  • 不,它默认为 NULL,没有额外的配置。

标签: mysql sql import overwrite


【解决方案1】:

是的,这是可能的。使用 INSERT INTO .. SELECT FROM 结构,如

insert into new_table(col1, col2, ...,coln)
select col1, col2, ...,coln from old_table;

没有,只是不要在插入语句中包含您的 PK 列,因此如果在您导入的表中 PK 是合成或自动递增的列,那么它将自动生成。

【讨论】:

  • 这将如何改变冲突的 PK?它会更改现有的 PK 还是导入的 PK?
  • 不是自增的,但是不知道是不是合成的,怎么查?
  • @Phazoner,检查您的表架构(创建表脚本)
  • show create table t 表明它不是合成的。那么... PK 生成会不会有问题?
  • 旧系统中的主键是怎么确定的?
【解决方案2】:

以下是我建议的语句结构示例-

INSERT INTO tblNewPermissions ( permissionsID,
                                oldPermission1,
                                oldPermission2,
                                newPermission1,
                                newPermission2 )
SELECT permissionsID,
       permission1,
       permission2,
       "newPermission1DefaultValue",
       "newPermission2DefaultValue"
FROM tblOldPermissions;

注意:您需要确保新表中用于存储旧数据的字段具有匹配的数据类型。

注意:此方法假定主键不是自增字段。

如果对此答案有任何问题或cmets,请随时发表评论。

【讨论】:

  • 你给出的答案基本上不是我已经发布的吗?
  • 您的回答没有明确引用字段列表中的主键,虽然它确实显示了如何导入旧权限,但没有显示如何将它们与新数据集成。跨度>
  • 另外,我们不能安全地假设主键是自动生成的。从原始问题和我的后续问题的答案来看,很可能需要导入旧记录的主键(它将构成新记录的主键),从而在 SQL 语句中显式引用。
  • 非常相似,在这种情况下我假设他建议从另一个表中手动选择写入在导入资源的某些字段中的信息。现在我问,这个插入将来自同一服务器中的其他数据库,所以我认为它会继续“来自 othertable.tableoldpermissions”,对吧?
  • 是的,使用 oldDB.tblOldPermissions。
猜你喜欢
  • 1970-01-01
  • 2019-11-01
  • 2017-12-20
  • 1970-01-01
  • 2018-03-10
  • 2017-10-06
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多