12-MySQLインデックスと外部キー
4352 ワード
索引インデックスとは何ですか?インデックスは、あるカラムに特定の値を持つローをすばやく見つけるために使用されます.インデックスを使用しないでください.MySQLは、最初のレコードからテーブルを完全に読む必要があります.関連するローを見つけるまで、テーブルが大きいほど、データを検索するのにかかる時間が多くなります.テーブルにクエリーされたカラムにインデックスがある場合、MySQLはすべてのデータを表示する必要がなく、データファイルを検索する場所にすばやく到達することができます.そうすると、時間が大幅に節約されます. MySQLにおけるインデックスの長所と短所と使用原則 の利点 すべてのMySqlフィールドはインデックス として使用できます.データの問合せ速度を大幅に高速化 原則 クエリーでよく使用されるフィールドにインデックスを作成する必要があります. データ量の小さいテーブルはインデックスを使用しないほうがいいです.インデックスは最適化されない可能性があります.
インデックス分類 通常のインデックス:MySQLの基本インデックスタイプで、制限はありません.定義されたインデックスの列に重複値と空の値を挿入することができます.データのクエリーを高速化するためです. 一意のインデックス(キーのみ):インデックス列の値は一意でなければなりませんが、NULL値を許可します. プライマリ・キー・インデックス:特殊な一意のインデックスであり、NULL値は許可されません. 具体的には、文書 を参照することができる.
データ整合性エンティティ整合性(行の整合性)1行のデータが完全であるかどうかは、複数のデータが同じであれば区別できない、エンティティ不完全 と呼ぶ.ドメイン整合性(カラム整合性)あるカラムデータが完全であるかどうか、nullが発生した場合、一致しないデータはいずれも不完全である を表す.参照整合性デフォルトでは複数のテーブルの間には何の関係もないので、Aテーブルには任意にデータを挿入することができ、Bテーブルには任意にデータを挿入することができ、例えば1枚の学生テーブルと1枚の成績テーブルがあり、成績テーブルに保存されているのは学生テーブルの各学生の成績 は、外部キー制約によりテーブルとテーブルの関係を追加することができ、MySQLがデータを挿入する際に、依存するデータが存在するかどうかをチェックしてこそ挿入できることをMySQLに伝えることができる.
外部キー外部キーとは何ですか?あるテーブルのフィールドが別のテーブルのプライマリ・キーを参照している場合、このフィールドは外部キー と呼ばれます.外部キーの特徴 メインテーブルには対応するデータがない、テーブルから挿入できない、挿入後もデータが不完全であるため .このプライマリ・テーブルのデータをテーブルから参照すると、プライマリ・テーブルはそのデータを削除できません.削除後もデータが不完全であるためです.
外部キー を表示外部キー を削除する.外部キーに関する動作
:
create table test1(
id int,
name varchar(20),
index idx_name(name) #
);
create table test2(
id int,
name varchar(20),
);
create index idx_name on test2(name); #
create table test3(
id int,
name varchar(20),
);
alter table test3 add index idx_name(name);
:
create table test4(
id int,
name varchar(20),
unique index idx_name(name) #
);
create table test5(
id int,
name varchar(20),
);
create unique index idx_name on test5(name); #
create table test6(
id int,
name varchar(20),
);
alter table test6 add unique index idx_name(name);
4.
drop index idx_name on test6
データ整合性
name score
lnj 100
lnj 100
:
-
id name score
1 lnj 100
2 lnj 100
-
name score
lnj 100
zq 100
-
id name score
1 lnj 100
2 lnj 100
id name score
1 lnj 100
2 zq null
2 zq tyt
-
id name score
1 lnj 100
2 zq null
2 zq 0
:
-
id name score
1 lnj 100
2 zq 0
2 zq 0
-
id name score
1 lnj 100
2 zq 59.5
2 zq 0
+
+ id name
+ 1 lnj
+ 2 zq
+
+ id stuid score
+ 1 1 100
+ 2 3 99
+ 3 2 86
でなければならない.外部キー
: stuid id, stuid
: stuid id, " ",
:
create table stugrade2(
id int auto_increment primary key,
stuid int,
score float,
# MySQL stuid , stuinfo id
foreign key(stuid) references stuinfo(id)
);
insert into stugrade2 values(null, 3, 100); # , sutinfo id 3
insert into stuinfo values(null, 'lnj');
insert into stugrade2 values(null, 3, 100); # , sutinfo id 3
insert into stugrade2 values(null, 1, 100);
delete from stuinfo where id=1; # ,
show create table stugrade3\G;
alter table stugrade3 drop foreign key stugrade3_ibfk_1;
- ( )
+ ,
+ ,
+ ,
-
+ , null,
+ : id 1 , stuid null
-
+ , ,
+ : 'lnj' id 1 3, stuid 1 3
- :
foreign key( ) references ( )[ ][ ]
:
create table stugrade(
id int auto_increment primary key,
stuid int,
score float,
# : ,
foreign key(stuid) references stuinfo(id) on delete set null on update cascade
);
insert into stugrade values(null, 1, 100);
update stuinfo set id=666 where id=1;
delete from stuinfo where id=666;