夥計們,我想了解以下問題的答案:我可以擁有沒有聚集索引的主鍵嗎?我也可以擁有多值聚簇索引嗎?
我能有沒有聚集索引主鍵? (我知道當我們在列上創建主鍵約束時,默認情況下會創建一個聚集索引,那麼在這種情況下,我應該如何關閉聚集索引?)
我可以擁有一個具有多列的聚集索引一起? (就像在非集羣中,我可以爲單個非聚集索引加入不同的列)。
夥計們,我想了解以下問題的答案:我可以擁有沒有聚集索引的主鍵嗎?我也可以擁有多值聚簇索引嗎?
我能有沒有聚集索引主鍵? (我知道當我們在列上創建主鍵約束時,默認情況下會創建一個聚集索引,那麼在這種情況下,我應該如何關閉聚集索引?)
我可以擁有一個具有多列的聚集索引一起? (就像在非集羣中,我可以爲單個非聚集索引加入不同的列)。
(這個答案是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