MySQL - 如果列已经被索引,那么主键会创建一个额外的索引吗?

9 浏览
0 Comments

MySQL - 如果列已经被索引,那么主键会创建一个额外的索引吗?

我有两个多语言文章的表。在第一个表中,我没有文本列(id、authorid、日期等)。在第二个表中,我有文本列(标题、内容等)。

对于第一个表中的每一行,在第二个表中可以有多行。例如,对于翻译成三种语言的文章,我在表2中有三行。

在表2中,列(id)有对表1的外键,所以它已经被索引了。我不能将表2的列id设置为唯一,因为很明显它不是唯一的。然而,在工作台中,我不能编辑表2的数据,因为它说-没有主键或非空唯一键。

我在方案中说的是:

Table1{
 id
 date
 authorId
}
Table2{
 id
 title
 content
 languageId
}

所以答案是,如果我在表2的列(id)上创建主键,MySQL会为这个列创建另一个索引吗?

0
0 Comments

在MySQL中,如果一个表已经有一个索引,那么当为该列创建一个主键时,是否会创建一个额外的索引呢?这个问题的原因是当尝试在Table2的id列上创建主键时,会出现错误,因为id列不是唯一的,而根据定义,主键必须是唯一的且不能为空。然而,为了能够在workbench中编辑Table2的数据,建议在Table2上创建一个复合主键,使用id和languageId字段。

解决方法是使用ALTER TABLE语句在Table2上添加一个复合主键,如下所示:

ALTER TABLE table2 ADD PRIMARY KEY( id, languageId );

这里假设id和languageId列共同唯一标识Table2中的一条记录。然后,当前索引可被删除,因为id现在已被主键覆盖。

0