MySQL-значение "первичный ключ", "уникальный ключ" и "ключ" при совместном использовании при создании таблицы
может ли кто-нибудь объяснить о цели PRIMARY KEY
,UNIQUE KEY
и KEY
, если он собран в один CREATE TABLE
заявление в MySQL?
CREATE TABLE IF NOT EXISTS `tmp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`tag` int(1) NOT NULL DEFAULT '0',
`description` varchar(255),
PRIMARY KEY (`id`),
UNIQUE KEY `uid` (`uid`),
KEY `name` (`name`),
KEY `tag` (`tag`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;
как преобразовать этот запрос в MSSQL?
3 ответа:
ключ - это просто обычный индекс. Путь к упрощению-думать об этом как о карточном каталоге в библиотеке. Это указывает MySQL в правильном направлении.
уникальный ключ также используется для повышения скорости поиска, но он имеет ограничение, что не может быть дублированных элементов (нет двух x и y, где x не y и x == y).
на руководство объясняет это следующим образом:
уникальный индекс создает такое ограничение, что все значения в индексе должно быть отчетливо. При попытке добавить новую строку с помощью значение ключа, соответствующее существующей строке. Это ограничение не применяется к нулевым значениям, за исключением механизма хранения BDB. Для других двигателей, Уникальный индекс допускает несколько нулевых значений для столбцов, которые могут содержать НОЛЬ. Если указать значение префикса для столбца в уникальном индексе, значения столбцов должны быть уникальными в пределах префикса.
первичный ключ-это специальный уникальный ключ. Это в основном уникальный ключ, за исключением того, что он используется для идентификации чего-то.
руководство объясняет, как используются индексы в целом:здесь.
в MSSQL понятия похожи. Есть индексы, первичные ключи и уникальные ограничения.
непроверенный, но я считаю, что эквивалент MSSQL:
CREATE TABLE tmp ( id int NOT NULL PRIMARY KEY IDENTITY, uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE, name varchar(255) NOT NULL, tag int NOT NULL DEFAULT 0, description varchar(255), ); CREATE INDEX idx_name ON tmp (name); CREATE INDEX idx_tag ON tmp (tag);
Edit: приведенный выше код проверяется на правильность; однако я подозреваю, что для этого есть гораздо лучший синтаксис. Был хотя с тех пор, как я использовал SQL server, и, видимо, я забыл совсем немного :).
просто, чтобы добавить к другим ответам, в документация дает такое объяснение:
KEY
обычно является синонимомINDEX
. Ключевой атрибутPRIMARY KEY
может также указывается как простоKEY
при задании в определении столбца. Этот была реализована для совместимости с другими системами баз данных.A
UNIQUE
индекс создает ограничение таким образом, что все значения в индексе должен быть отчетливый. При попытке добавить новую строку с помощью значение ключа, соответствующее существующей строке. Для всех двигателей, аUNIQUE
индекс позволяет несколькоNULL
значения для столбцов, которые могут содержатьNULL
.A
PRIMARY KEY
- это уникальный индекс, в котором должны быть определены все ключевые столбцы какNOT NULL
. Если они явно не объявлены какNOT NULL
, MySQL объявляет их так неявно (и молча). Таблица может иметь только одинPRIMARY KEY
. Имя aPRIMARY KEY
is всегдаPRIMARY
, которое таким образом не может использоваться в качестве имени для любого другого типа индекса.
уникальные и первичные ключи MySQL служат для идентификации строк. В таблице может быть только один первичный ключ, но один или несколько уникальных ключей. Ключ-это просто индекс.
для получения более подробной информации вы можете проверить http://www.geeksww.com/tutorials/database_management_systems/mysql/tips_and_tricks/mysql_primary_key_vs_unique_key_constraints.php
чтобы преобразовать mysql в mssql попробуйте это и см. http://gathadams.com/2008/02/07/convert-mysql-to-ms-sql-server/