Mysql 我可以有一个没有聚集索引的主键吗?我还可以有多值聚集索引吗?
各位,我想了解以下问题的答案:Mysql 我可以有一个没有聚集索引的主键吗?我还可以有多值聚集索引吗?,mysql,sql,sql-server,clustered-index,Mysql,Sql,Sql Server,Clustered Index,各位,我想了解以下问题的答案: 我可以有一个没有聚集索引的主键吗?(我知道当我们在列上创建主键约束时,默认情况下它会创建聚集索引。那么,在这种情况下,我应该如何停用聚集索引?) 我可以有一个多栏的聚集索引吗?(就像在非聚集索引中,我可以为单个非聚集索引连接不同的列) MySQL和SQL-SERVER是不同的RDBMS。它们具有不同的功能和不同的语法 使用InnoDB时,MySQL总是将PK作为聚集索引 CREATE UNIQUE CLUSTERED INDEX IX_MyTable_Clus
MySQL
和SQL-SERVER
是不同的RDBMS。它们具有不同的功能和不同的语法
使用InnoDB时,MySQL
总是将PK作为聚集索引
CREATE UNIQUE CLUSTERED INDEX IX_MyTable_Clus
ON MyTable(Col1, Col2, Col3);
然而,SQL-SERVER
将允许您创建不带CLUSTERED
关键字的PK,并允许您在另一个索引中使用它
在这两种情况下,主密钥和索引(集群或非集群)可以覆盖多个字段。(这个答案仅适用于SQL Server 2005+。我对MySQL一无所知。)
我可以有一个没有聚集索引的主键吗 对。正如您提到的,主键约束默认由聚集索引支持。您可以通过以下方式声明约束,告知SQL Server使用非聚集索引支持约束:
ALTER TABLE MyTable
ADD CONSTRAINT PK_MyTable
PRIMARY KEY NONCLUSTERED(Col1);
我可以有一个多栏的聚集索引吗?(就像在非聚集索引中,我可以为单个非聚集索引连接不同的列) 是的,您可以在索引键中定义具有多个列的索引。它实际上与非聚集索引没有什么不同
CREATE UNIQUE CLUSTERED INDEX IX_MyTable_Clus
ON MyTable(Col1, Col2, Col3);
参考资料:,此外,InnoDB总是有一个聚集索引,即使您没有主键。@Dems:嗨,Dems,谢谢您的回答。抱歉,我不知道什么是InnoDB,我是新手,我为愚蠢的问题感到抱歉。我如何创建一个没有Clluetersted索引的PK?我的意思是,如果我只是用语法和主键创建一个表,或者使用GUI工具创建一个表,其中我只勾选了我需要作为主键的列。我真的是新手:(希望你明白我到底在做什么:(我需要知道实现它的具体方法。语句
SQL-SERVER…将允许您创建一个没有聚集关键字的PK,并允许您在另一个索引中使用它。
不正确-省略CLUSTERED
关键字默认情况下仍将创建聚集索引。您必须使用NONCLUSTERED
>关键字。这以我咀嚼/消化的方式完美地回答了我的问题。非常感谢:):)干杯