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