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

时间:2019-02-08 16:24:59

标签: mysql sql sql-server indexing syntax

我正在跟踪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)

2 个答案:

答案 0 :(得分:1)

我可以使用的等效SQL Server语法是什么

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

manual中,我注意到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+还应该在INDEX语句中支持CREATE TABLE关键字。

但是INDEX关键字的有效语法正在使用

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

但是还有其他错误,例如数据类型或关键字。

SQL服务器的正确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) 
);

答案 1 :(得分:0)

您可以使用适用于任何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引擎都应支持此语法。