SQL Server中的MySQL INDEX()语法等效
我正在关注一个PHP工作簿,其中一个练习要求我使用以下MySQL代码创建一个包含列的表SQL Server中的MySQL INDEX()语法等效,mysql,sql,sql-server,indexing,syntax,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 NUL
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的正确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引擎都应该支持此语法。您有错误吗?显示确切的错误消息是,我在“索引”附近得到了错误的语法。如果这是作为表提示的一部分,那么现在需要一个WITH关键字和括号。有关正确的语法,请参阅SQL Server联机丛书。当RDBMS供应商之间出现不一致时,您遇到了冰山一角。仍然需要消息的标识直到需要消息的标识确实@JoelCoehoorn谢谢忘记那个标识。
CREATE INDEX parent_id_idx ON messages (parent_id))