Mysql 如何将自动递增的主键作为外键添加到现有数据库表中?

Mysql 如何将自动递增的主键作为外键添加到现有数据库表中?,mysql,database-design,foreign-keys,Mysql,Database Design,Foreign Keys,我得到了三个mysql数据库表,它们使用外键约束正确连接,如下所示: 但问题是外键约束的字段不是整数,而是自动递增类型,它们都是varchar类型 我试图不阻止对这些表重新进行映射,这些表的区域已正确映射,但希望添加一个新的整型和唯一的主键和外键。使所有表中的所有数据保持不变。请让我知道,如果有任何方式,我可以运行一个脚本,可以自动映射现有的表与新的主键和外键 我试图在基表上添加主键 ALTER TABLE videofile ADD id int NOT NULL AUTO_INCREMEN

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

但问题是外键约束的字段不是整数,而是自动递增类型,它们都是varchar类型

我试图不阻止对这些表重新进行映射,这些表的区域已正确映射,但希望添加一个新的整型和唯一的主键和外键。使所有表中的所有数据保持不变。请让我知道,如果有任何方式,我可以运行一个脚本,可以自动映射现有的表与新的主键和外键

我试图在基表上添加主键

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

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

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

  • 创建具有新键结构的表的新版本:
    SubjectId
    /
    VideoId
    /
    Id
    作为主键,旧主键作为备用键(唯一约束)。我们将用后缀“新”来指代它们
  • 锁定表或使数据库脱机
  • 首先将数据从
    Subject
    加载到
    Subject\u New
    中。然后,将
    Subject\u New
    加入到
    Video
    中,以获取要插入
    Video\u New
    的新密钥
  • 根据
    视频
    对表格重复相同步骤
  • 禁用旧表中的任何依赖项/约束,并将其应用于新表
  • 将旧表添加到
    \u old
    ,并从刚创建的表中删除_new后缀
  • 把东西带回到网上

  • 为什么您觉得需要行标识符?是否有存储或其他因素推动了这一变化?@bbaird:由于一些java脚本库需要int字段来绑定数据,而不是触发此问题的文本,它们不是很多吗:很多--即视频有许多主题,主题与许多视频相关联?此任务需要自定义代码。您需要1)删除外键约束。2) 将标识符添加到主题表中。3) 将标识符添加到视频表中。4) 将标识符添加到elan表中。5) 为视频表创建外键。6) 为elan表创建外键。7) 删除现有外键。8) 添加新的外键和外键约束。9) 删除主索引并创建新的主索引。选择支持SQL的编程语言。正如我所说,该任务需要经过测试和重新测试的自定义代码。您可以尝试通过Workbench执行此操作,但这太容易出错。您认为新的PK-FK会保留现有表的关系吗?甚至添加新的。只要您确保旧PK列上有唯一的约束,新列将充当该键的代理项,并且只要您将该代理项与子表关联,它将有效地强制执行先前的关系。创建表的新版本时,您将创建使用新PK强制关系所需的FK约束,并在插入任何数据之前执行该操作。