【问题标题】:Altering column on two tables simultaneously同时更改两个表上的列
【发布时间】:2014-12-04 18:44:15
【问题描述】:

我有链接表,playersplayerRegSeason。它们由playerID 链接,这是players 的主键,并且是一种奇怪的非数字形式。我想让所有新条目都具有唯一的自动递增playerIDs。如果我将列更改为自动递增,它会更改所有当前的playerIDs,我可以接受,但我失去了与playerRegSeason 的关系。有没有办法改变playerID 列,使其在playerRegSeason 中自动更新?

【问题讨论】:

  • 您使用的是什么版本的 SQL?
  • 为什么不创建一个名为 intID 的新列。然后使用自动增量器创建 id。现在的示例 playerID 是 ABC1234。您可以保留所有现有的 ID,因为它们已经存在。在您的代码中,您基本上可以说新人的 playerID 是 ABC + 自动增量值。这有意义吗

标签: sql alter


【解决方案1】:

通常你最好分阶段进行。

  1. 使用players 表的自动增量创建一个新列并填充它。
  2. 将列添加到playerRegSeason 允许它最初是NULL
  3. 更新playerRegSeason 中的新列以指向新的playerID 列。
  4. playerRegSeason 中的列更改为不允许空值
  5. playerRegSeason添加新的外部约束
  6. 删除旧的外部约束
  7. 从两个表中删除旧的 ID 和外部字段。

编辑: 根据要求详细说明第 3 步

UPDATE playerRegSeason s
INNER JOIN players p ON s.playerID = p.playerID
SET s.NewPlayerID =  p.NewPlayerID

但具体语法可能因 SQL 版本而异

【讨论】:

  • 抱歉,您能否详细说明第 3 步?
  • 没问题,我已将其添加到答案中。
猜你喜欢
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
相关资源
最近更新 更多