[英]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.