mysqlのキー、主キー、一意キー、インデックスの違い[転送]

まず、キーと主キーの違い

CREATE TABLE wh_logrecord (
logrecord_id int(11) NOT NULL auto_increment,
user_name varchar(100) default NULL,
operation_time datetime default NULL,
logrecord_operation varchar(100) default NULL,
PRIMARY KEY (logrecord_id),
KEY wh_logrecord_user_name (user_name)
)

 
分析:
KEY wh_logrecord_user_name(user_name)
このテーブルのuser_nameフィールドとwh_logrecord_user_nameテーブルuser_nameフィールド
は、外部キーを確立します。括弧は、外部キーを確立するための対応するテーブルです。括弧は対応するフィールドです
。KEYユーザー(userid)に似ています。
もちろん、すべてのキーが外部キーであるとは限りません。

 
概要:
キーはインデックス制約であり、テーブルのフィールドの制約インデックスは、プライマリ外部一意を介して作成されます。一般的に使用される外部キー、外部キーの関連付け。

 
KEYフォーラム(ステータス、タイプ、表示順序)#は複数列のインデックス(キー)です
。KEYtid(tid)#は単一列のインデックス(キー)です。

 
テーブルを作成する場合:KEYフォーラム(ステータス、タイプ、表示順序)ステータス、タイプ、表示順序で
テーブルグループから*を選択すると、このインデックスが自動的に使用
されます。このインデックスは、ステータスでテーブルグループから*を選択するときに役立ちますか?

 
キーの目的:主にクエリを高速化するために使用されます。

 

次に、KEYとINDEXの違い

コメント:私はこの部分でまだ霧の中です。
KEY通常はINDEX同義語です。PRIMARY KEY列定義でキーワード属性が指定されている場合、PRIMARY KEYはKEYのみとして指定することもできます。この目的は、他のデータベースシステムとの互換性を保つことです。PRIMARY KEYは一意のキーです。現時点では、すべてのキー列をNOT NULLとして定義する必要があります。これらのカラムがNOT NULLとして明示的に定義されていない場合、MySQLはこれらのカラムを暗黙的に定義する必要があります。テーブルのPRIMARY KEYは1つだけです。

 
MySQLのインデックスとキーの違い

 
キーは、主キー(外部キー)、外部キー(外部キー)などのリレーショナルモデル理論の一部であり、データ整合性チェックと一意性制約に使用されるキー値です。インデックスは実装レベルです。たとえば、テーブルの任意の列にインデックスを付けることができます。インデックスが付けられた列がSQLステートメントのWhere条件にある場合、高速なデータの配置と高速な取得が可能になります。一意のインデックスに関しては、それはインデックスの1つにすぎません。一意のインデックスは、この列のデータが反復可能でないことを示すために確立されます。MySQLが一意のインデックスタイプのインデックスに対して特別な最適化を実行できると思います。

 
したがって、テーブルを設計する場合、キーはモデルレベルでのみ必要であり、クエリの最適化が必要な場合は、関連する列にインデックスを付けることができます。

 
さらに、MySQLでは、主キーの列に対して、MySQLが自動的に一意のインデックスを確立しているため、そのインデックスを繰り返す必要はありません。

 
説明が見つかりました:

 

「プライマリ」はINDEXではなくPRIMARY KEYと呼ばれることに注意してください。
KEYは論理レベルの何かであり、テーブルとデータベースの設計を記述します(つまり、参照整合性を適用します...)
INDEXは物理レベルの何かであり、テーブル操作のアクセス時間の改善に役立ちます。
すべてのPKの背後には、(通常)一意のインデックスが(自動的に)作成されます。

 

第三に、mysql UNIQUE KEYとのPRIMARY KEY違いは何ですか

1.主キーの1つ以上の列はNOT NULLでなければなりません。列がNULLの場合、PRIMARY KEYが追加されると、列は自動的にNOT NULLに変更されます。UNIQUE KEYには、列に対するこの要件はありません。

 
2.テーブルは1つの主キーのみを持つことができますが、複数の一意キーを持つことができます

 
3.主キーと一意キーの制約は、インデックスを参照して実装されます。挿入された値がNULLの場合、インデックスの原則に従って、すべてのNULL値がインデックスに記録されないため、すべてのNULL値を挿入すると、重複が発生する可能性があります。他のユーザーは重複する値を挿入できません。

alter table t add constraint uk_t_1 unique (a,b);
insert into t (a ,b ) values (null,1);    # 不能重复
insert into t (a ,b ) values (null,null);#可以重复

 
4、一意キーを使用

CREATE TABLE `secure_vulnerability_warning` (
  `id` int(10) NOT NULL auto_increment,
  `date` date NOT NULL,
  `type` varchar(100) NOT NULL,
  `sub_type` varchar(100) NOT NULL,
  `domain_name` varchar(128) NOT NULL,
  `url` text NOT NULL,
  `parameters` text NOT NULL,
  `hash` varchar(100) NOT NULL,
  `deal` int(1) NOT NULL,
  `deal_date` date default NULL,
  `remark` text,
  `last_push_time` datetime default NULL,
  `push_times` int(11) default '1',
  `first_set_ok_time` datetime default NULL,
  `last_set_ok_time` datetime default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `date` (`date`,`hash`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8

一意キーの目的:データが挿入されるときに重複を防ぐために主に使用されます。

1.テーブルを作成するとき

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)

UNIQUE制約に名前を付けて複数の列にUNIQUE制約を定義する必要がある場合は、次のSQL構文を使用します。

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)

2.テーブルが作成されたら、 "Id_P"列にUNIQUE制約を作成するために、次のSQLを使用します。

ALTER TABLE Persons
ADD UNIQUE (Id_P)

UNIQUE制約に名前を付け、複数の列にUNIQUE制約を定義するには、次のSQL構文を使用します。

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

3. UNIQUE制約を取り消す

UNIQUE制約を元に戻すには、次のSQLを使用します。

ALTER TABLE Persons
DROP INDEX uc_PersonID

記事の転送元:https : //www.iteye.com/blog/zccst-1697043

おすすめ

転載: www.cnblogs.com/KillBugMe/p/12681488.html