2013-01-18 80 views
0

我需要将我的表修改表数据类型从bigint改为int,总共有200个表在数据库中,但由于外键约束,我无法更改我的表。MySQL DROP所有表外键

我试过SET foreign_key_checks = 0;但它不适用于修改数据类型。

请告诉我有没有其他的方式来修改表而不影响现有的表。

+5

..... 1.你输入了什么命令。 2.发生了什么事。 3.“不起作用”是什么意思。 4.如果您有任何错误,请在此处显示。 5.您是否将所有行都更改为int(因为否则不能将外键保留) – Nanne

+0

+1问这样的问题。不知道为什么人们给你-2 – neeraj

+0

+1因为这是一个很好的问题。有一个答案 - 重新创建外键(见奥古斯托的答案)。所以,所有的表都必须手动重构,或者(可能)以某种方式生成重构SQL脚本。 – Devart

回答

1

这并不像您想象的那么简单。正如我所假设的那样,你想改变的组合是表的主键的一部分。

因此,这些都是你需要的MySQL遵循

  • 丢弃所有的FKS表
  • 更新桌子上
  • 上的所有表有更新的数据类型数据类型的步骤一个FK到您想要更改的表格。
  • 重新创建所有FKS

除了我上面提到的,有没有其他的方式来“欺骗”的MySQL更改列,它是一个PK/FK的一部分。

MySQL需要PK和FK中的列完全相同的数据类型,否则您将无法重新创建FK。