在MySQL中更改表的主键会导致什么?

时间:2018-07-10 18:55:18

标签: mysql primary-key

在MySQL中,

  • 每当我更改表的主键时,是否会删除原始主键上的原始索引并创建新主键上的新索引是否正确?

    < / li>
  • 基于主键的索引是否总是群集?如是。更改表的主键时,要移动的表中的记录是否按照新的主键的顺序存储?

谢谢。

2 个答案:

答案 0 :(得分:2)

MySQL的默认存储引擎是InnoDB。 InnoDB始终使用主键作为聚簇索引将表存储为聚簇索引。有关详细信息,请参见https://dev.mysql.com/doc/refman/8.0/en/innodb-index-types.html

如果您更改为表的主键定义的列,例如以下内容:

ALTER TABLE MyTable DROP PRIMARY KEY, ADD PRIMARY KEY (id2);

这将需要使用新定义的主键作为聚簇索引,将该表的所有页面复制到新布局。

这不是唯一需要表格副本的操作。任何更改行大小的ALTER TABLE都将执行表复制。例如。添加/删除列,更改数据类型(有一些例外),更改列的可空性等。有关详细信息,请参见https://dev.mysql.com/doc/refman/8.0/en/innodb-create-index-overview.html

P.S .:我不再烦恼地回答有关MyISAM存储引擎的问题。它即将被弃用。人们越早停止将MyISAM视为可行的选择,那就越好。

答案 1 :(得分:1)

要回答您提出的问题:

1)是,将为新的主键创建一个新索引。

2)对于使用InnoDB存储引擎的表,是的,该表将以新的主键作为集群键进行重组(行将按主键按索引顺序存储;表本身被组织为索引。 )对于使用MyISAM存储引擎的表,否。