我正在跟踪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)
答案 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引擎都应支持此语法。