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 57

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. Имя a PRIMARY 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/