我下面一个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)
展望在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 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引擎的支持。