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
    >关键字。这以我咀嚼/消化的方式完美地回答了我的问题。非常感谢:):)干杯