首页 > 解决方案 > 如何将自动递增的主键作为外键添加到现有数据库表?

问题描述

我得到了三个使用外键约束正确连接的 mysql 数据库表,如下所示:

当前数据库模式

但问题是外键受非整数和自动增量类型的字段限制,而是它们都是 varchar 类型。

我试图不阻止对这些已经正确映射的区域重新进行映射,而是想添加一个新的整数类型和唯一的主键和外键。这样所有表中的所有数据都保持不变。请让我知道是否有任何方法可以运行可以使用新的主键和外键自动映射现有表的脚本。

我试图在基表上添加主键

ALTER TABLE videofile ADD id int NOT NULL AUTO_INCREMENT primary key;

这将向基表添加一个新的主键,但我希望新添加的主键作为基于现有映射键和数据的其他表的 FK。请让我知道是否存在任何脚本来自定义此需求。

标签: mysqldatabase-designforeign-keys

解决方案


这将需要重建表格,因此您必须撕下创可贴。与往常一样,在进行更改之前测试 DDL。

  1. 使用新的键结构创建新版本的表://SubjectId作为主键,旧的主键作为备用键(唯一约束)。我们将使用后缀 _new 来引用它们。VideoId<whatever>Id
  2. 锁定表或使数据库脱机。
  3. 首先将数据加载SubjectSubject_New。然后,加入Subject_NewtoVideo以获取要插入的新密钥Video_New
  4. 对依赖的表重复相同的步骤Video
  5. 禁用旧表中的任何依赖项/约束并将其应用于新表。
  6. 将旧表重命名<table>_old为并从您刚刚创建的表中删除 _new 后缀。
  7. 让事情重新上线。

推荐阅读