我可以拥有没有聚集索引的主键吗?我也可以拥有多值聚簇索引吗?
伙计们,我想了解以下问题的答案:我可以拥有没有聚集索引的主键吗?我也可以拥有多值聚簇索引吗?
我能有没有聚集索引主键? (我知道当我们在列上创建主键约束时,默认情况下会创建一个聚集索引,那么在这种情况下,我应该如何关闭聚集索引?)
我可以拥有一个具有多列的聚集索引一起? (就像在非集群中,我可以为单个非聚集索引加入不同的列)。
(这个答案是SQL Server 2005+而已。我什么都不知道关于MySQL)
我能有没有聚集索引主键?
是的。正如您所提到的,默认情况下,主键约束由聚簇索引支持。你可以告诉SQL服务器通过声明约束与非聚集索引背约束如下:
ALTER TABLE MyTable
ADD CONSTRAINT PK_MyTable
PRIMARY KEY NONCLUSTERED(Col1);
我可以有多个列一起聚集索引? (就像在非集群中,我可以为单个非聚集索引加入不同的列)。
是的,您可以在索引键中定义多个列的索引。它与非聚集索引真的没有什么不同。
CREATE UNIQUE CLUSTERED INDEX IX_MyTable_Clus
ON MyTable(Col1, Col2, Col3);
参考文献:ALTER TABLE
,CREATE INDEX
MySQL
和SQL-SERVER
是不同的RDBMS。它们具有不同的功能和不同的语法。
使用InnoDB时,MySQL
总是使PK成为聚簇索引。
SQL-SERVER
但是,可以让您创建一个没有CLUSTERED
关键字的PK,而是让您在另一个索引中使用它。
在这两种情况下,PrimaryKeys和Indexes(聚集或不聚集)都可以覆盖多个字段。
另外,InnoDB的始终,即使你没有一个主键聚集索引。 – Vatev 2012-08-08 12:49:32
@Dems:嗨Dems,谢谢你的回答。道歉,我duno什么是InnoDB,我是新手,对于愚蠢的问题感到抱歉。而且,如何在没有Clluetersted索引的情况下创建PK?我的意思是,如果我只是创建一个带有语法的表格,并提及主键,或者使用GUI工具创建表格,我只需将我需要的列作为主键。我真的很新:(希望你明白我究竟是什么背后:(我需要知道实现它的具体方式) – Learner 2012-08-08 12:52:00
声明SQL-SERVER ...可以让你创建没有CLUSTERED关键字的PK,并让您可以在另一个索引内使用它。'不正确 - 省略'CLUSTERED'关键字将默认创建一个聚集索引。你必须使用'NONCLUSTERED'关键字。 – 2012-08-08 16:58:42
完美回答我的问题,我可以咀嚼/消化的方式。非常感谢你:) :)干杯 – Learner 2012-08-08 17:09:32
@Divine:不客气! – 2012-08-08 17:13:18
在乔恩,:)干杯 – Learner 2012-08-08 17:14:42