mysql - 如何将自动递增的主键作为外键添加到现有数据库表?
问题描述
我得到了三个使用外键约束正确连接的 mysql 数据库表,如下所示:
但问题是外键受非整数和自动增量类型的字段限制,而是它们都是 varchar 类型。
我试图不阻止对这些已经正确映射的区域重新进行映射,而是想添加一个新的整数类型和唯一的主键和外键。这样所有表中的所有数据都保持不变。请让我知道是否有任何方法可以运行可以使用新的主键和外键自动映射现有表的脚本。
我试图在基表上添加主键
ALTER TABLE videofile ADD id int NOT NULL AUTO_INCREMENT primary key;
这将向基表添加一个新的主键,但我希望新添加的主键作为基于现有映射键和数据的其他表的 FK。请让我知道是否存在任何脚本来自定义此需求。
解决方案
这将需要重建表格,因此您必须撕下创可贴。与往常一样,在进行更改之前测试 DDL。
- 使用新的键结构创建新版本的表://
SubjectId
作为主键,旧的主键作为备用键(唯一约束)。我们将使用后缀 _new 来引用它们。VideoId
<whatever>Id
- 锁定表或使数据库脱机。
- 首先将数据加载
Subject
到Subject_New
。然后,加入Subject_New
toVideo
以获取要插入的新密钥Video_New
。 - 对依赖的表重复相同的步骤
Video
。 - 禁用旧表中的任何依赖项/约束并将其应用于新表。
- 将旧表重命名
<table>_old
为并从您刚刚创建的表中删除 _new 后缀。 - 让事情重新上线。
推荐阅读
- google-cloud-platform - 在具有单个 NIC 的单个 GCE 实例上分配多个私有到公共的映射
- python - Python 无法导入自定义模块
- firebase - 未处理的异常:查找已停用小部件的祖先是不安全的 - Flutter
- javascript - 如何一个接一个地调用方法?
- css - CSS 网格尺寸
- android - 三星和小米显示通知 此应用尚未向您发送任何通知
- android - 如何从服务器下载部分 mp3?
- android - 如何在使用 recyclerview 分离 Viewpager 中的视图之前分离父级?
- xamarin - 在哪里可以找到 `Xamarin.Forms.Platform.Android.ViewRenderer` 或 `Xamarin.Forms.Platform.iOS.ViewRenderer` API 文档?
- javascript - JavaScript For 循环在最后一个元素之前结束