Эквивалент синтаксиса MySQL INDEX () в SQL Server - PullRequest
0 голосов
/ 08 февраля 2019

Я слежу за книгой по 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 голосов
/ 08 февраля 2019

Вы можете использовать синтаксис, который должен работать в любом механизме 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.

0 голосов
/ 08 февраля 2019

Каков эквивалентный синтаксис 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+ также должен поддерживать ключевое слово 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) 
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...