66

MySQLで1つのステートメントにまとめられている場合PRIMARY KEYUNIQUE KEYの目的について誰かが説明できますか?KEYCREATE 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に変換するにはどうすればよいですか?

4

3 に答える 3

92

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

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

マニュアルでは次のように説明しています。

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サーバーを使用してからしばらく経ちましたが、どうやらかなり忘れていました:)。

于 2012-06-06T05:36:44.690 に答える
29

他の回答に追加するだけで、ドキュメントには次の説明があります。

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

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

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

于 2012-06-06T05:39:51.653 に答える
3

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/ を参照してください。

于 2012-06-06T05:33:11.973 に答える