PRIMARY KEY
、UNIQUE 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に変換するにはどうすればよいですか?
キーは単なる通常のインデックスです。単純化を超える方法は、図書館のカードカタログのように考えることです。 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サーバーを使用してからしばらく経ちましたが、かなり忘れていたようです:)。
他の回答に追加するために、 documentation でこの説明を示します。
KEY
は通常、INDEX
の同義語です。キー属性PRIMARY KEY
は、列定義で指定された場合、単にKEY
として指定することもできます。これは、他のデータベースシステムとの互換性のために実装されました。
UNIQUE
インデックスは、インデックス内のすべての値が異なる必要があるような制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。すべてのエンジンで、UNIQUE
インデックスは、NULL
を含むことができる列に複数のNULL
値を許可します。
PRIMARY KEY
は、すべてのキー列をNOT NULL
として定義する必要がある一意のインデックスです。それらがNOT NULL
として明示的に宣言されていない場合、MySQLはそれらを暗黙的に(そして静かに)宣言します。テーブルに含めることができるPRIMARY KEY
は1つだけです。PRIMARY KEY
の名前は常にPRIMARY
であるため、他の種類のインデックスの名前として使用することはできません。
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/