簡體   English   中英

SQL Server中的MySQL INDEX()語法等效

[英]MySQL INDEX() syntax equivalent in SQL Server

我正在閱讀PHP工作簿,其中一項練習要求我使用以下MySQL代碼創建帶有列的表

CREATE TABLE messages ( 
    message_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    parent_id INT UNSIGNED NOT NULL DEFAULT 0, 
    forum_id TINYINT UNSIGNED NOT NULL, 
    user_id MEDIUMINT UNSIGNED NOT NULL, 
    subject VARCHAR(100) NOT NULL,
    body LONGTEXT NOT NULL, 
    date_entered DATETIME NOT NULL, 
    PRIMARY KEY (message_id), 
    INDEX (parent_id), 
    INDEX (forum_id),
    INDEX (user_id),
    INDEX (date_entered) 
);

問題出在我工作的地方,他們使用Microsoft SQL Server,因此語法不同。

我可以用於的等效SQL Server語法是什么

INDEX (parent_id), 
INDEX (forum_id),
INDEX (user_id),
INDEX (date_entered)

我可以用於的等效SQL Server語法是什么

 INDEX (parent_id), 
 INDEX (forum_id),
 INDEX (user_id),
 INDEX (date_entered)

手冊中,我注意到BNF表格。

<column_index> ::=   
 INDEX index_name [ CLUSTERED | NONCLUSTERED ]  
    [ WITH ( <index_option> [ ,... n ] ) ]  
    [ ON { partition_scheme_name (column_name )   
         | filegroup_name  
         | default   
         }  
    ]   
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]  

因此,SQL Server 2008+還應該在CREATE TABLE語句中支持INDEX關鍵字。

但是INDEX關鍵字的有效語法正在使用

CREATE TABLE test ( 
   id INT
 , INDEX index_name (id)
);

但是還有其他錯誤,例如數據類型或關鍵字。

SQL Server的正確SQL代碼是

CREATE TABLE messages ( 
 message_id INT identity(1, 1), 
 parent_id INT NOT NULL DEFAULT 0, 
 forum_id TINYINT NOT NULL, 
 user_id INT NOT NULL, 
 subject VARCHAR(100) NOT NULL,
 body TEXT NOT NULL, 
 date_entered DATETIME NOT NULL, 
 PRIMARY KEY (message_id), 
 INDEX parent_id (parent_id), 
 INDEX forum_id (forum_id),
 INDEX user_id (user_id),
 INDEX date_entered (date_entered) 
);

您可以使用在任何SQL引擎中都可以使用的語法,例如

CREATE TABLE messages ( 
    message_id INT, 
    parent_id INT NOT NULL DEFAULT 0, 
    forum_id TINYINT NOT NULL, 
    user_id INT NOT NULL, 
    subject VARCHAR(100) NOT NULL,
    body TEXT NOT NULL, 
    date_entered DATETIME NOT NULL, 
    PRIMARY KEY (message_id)
)

然后分別創建其他索引:

CREATE INDEX parent_id_idx ON messages (parent_id))

等等。

所有SQL引擎都應支持此語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM