web-dev-qa-db-ja.com

MySQL-「PRIMARY KEY」、「UNIQUE KEY」、および「KEY」の意味は、テーブルの作成中に一緒に使用される場合

PRIMARY KEYUNIQUE KEY、およびKEYの目的について、MySQLの単一のCREATE TABLEステートメントにまとめた場合、誰でも説明できますか?

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に変換するにはどうすればよいですか?

63
sura2k

キーは単なる通常のインデックスです。単純化を超える方法は、図書館のカードカタログのように考えることです。 MySQLを正しい方向に向けます。

一意のキーも検索速度を向上させるために使用されますが、重複するアイテムが存在しないという制約があります(xがyでなくx == yであるxとyが2つない)。

manual は次のように説明しています:

UNIQUEインデックスは、インデックス内のすべての値が異なる必要があるような制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。この制約は、BDBストレージエンジンを除き、NULL値には適用されません。他のエンジンの場合、UNIQUEインデックスは、NULLを含むことができる列に対して複数のNULL値を許可します。 UNIQUEインデックスのカラムにプレフィックス値を指定する場合、カラム値はプレフィックス内で一意である必要があります。

主キーは「特別な」一意のキーです。それは何かを識別するために使用されることを除いて、基本的に一意のキーです。

このマニュアルでは、インデックスの一般的な使用方法について説明します: here

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);

編集:上記のコードは正しいことがテストされています。ただし、それを行うためのはるかに優れた構文があると思います。 SQLサーバーを使用してからしばらく経ちましたが、かなり忘れていたようです:)。

90
Corbin

他の回答に追加するために、 documentation でこの説明を示します。

  • KEYは通常、INDEXの同義語です。キー属性PRIMARY KEYは、列定義で指定された場合、単にKEYとして指定することもできます。これは、他のデータベースシステムとの互換性のために実装されました。

  • UNIQUEインデックスは、インデックス内のすべての値が異なる必要があるような制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。すべてのエンジンで、UNIQUEインデックスは、NULLを含むことができる列に複数のNULL値を許可します。

  • PRIMARY KEYは、すべてのキー列をNOT NULLとして定義する必要がある一意のインデックスです。それらがNOT NULLとして明示的に宣言されていない場合、MySQLはそれらを暗黙的に(そして静かに)宣言します。テーブルに含めることができるPRIMARY KEYは1つだけです。 PRIMARY KEYの名前は常にPRIMARYであるため、他の種類のインデックスの名前として使用することはできません。

27
Paul Bellora

MySQLの一意の主キーは、行を識別するのに役立ちます。テーブルには主キーは1つだけ存在できますが、1つ以上の一意のキーがあります。キーは単なるインデックスです。

詳細については、確認できます 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/

3
Wazan