溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL索引概述

發(fā)布時間:2020-06-05 17:46:22 來源:網(wǎng)絡(luò) 閱讀:823 作者:期待美好 欄目:MySQL數(shù)據(jù)庫

MySQL索引概述
索引的優(yōu)點:
1.通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
2.可以加快數(shù)據(jù)的檢索速度。
索引缺點:
1.當對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)的維護,降低了數(shù)據(jù)的維護速度。
2.索引需要占據(jù)物理空間。

索引的類型:
1.INDEX:普通索引
2.PRIMARY KEY:主鍵
3.UNIQUE:唯一索引
4.FOREIGN KEY:外鍵
5.FULLTEXT:群文索引

1.INDEX:普通索引
1.1一個表中可以有多個INDEX字段。
1.2字段的值允許有重復(fù),且可以賦NULL值。
1.3經(jīng)常把做查詢條件的字段設(shè)置為INDEX字段。
1.4INDEX字段的KEY標志是MUL。

insert into 庫名.表名 values(值列表); #插入表記錄
select * from 庫名.表名; 查看表的所有記錄

例:建表的時候指定索引字段
-INDEX(字段1),INDEX(字段2)...
mysql>create database ku;
mysql>create table ku.abc(
>id    int(2) not null,
>name  varchar(4)  not null,
>age   int(3)  not null,
>index(name),index(age)               
>);

mysql>desc ku.abc;
Field  Type  Null  Key   Default   Extra
..   ..     ..      MUL    ..     ..

mysql>insert into ku.abc values(1,"wang",23);
mysql>select * from ku.abc;

在已有創(chuàng)建的表中設(shè)置INDEX字段
格式:create index 索引名 on 庫名.表名(字段);

刪除指定表的索引字段
格式:drop index 索引名 on 庫名.表名;

例:
mysql>create index  xixi on ku.abc(id);
mysql>drop  index  xixi on ku.abc;

查看表的索引信息
格式:show index from 庫名.表名;

例:
mysql>show index from ku.abc\G;
......
Index_type: BTREE(默認使用B樹算法)
......

默認使用的索引類型:BTREE(二叉樹) hash B+Tree

2.PRIMARY KEY:主鍵
2.1一個表中只能有一個primary key字段
2.2對應(yīng)字段的值不允許有重復(fù),且不允許賦NULL值。
2.3如果有多個字段都作為primary key,稱為復(fù)合主鍵,必須一起創(chuàng)建。
2.4主鍵字段的KEY標志是PRI。
2.5通常與AUTO_INCREMENT連用。
2.6經(jīng)常把表中能夠唯一標示記錄的字段設(shè)置為主鍵字段。(如記錄編號字段)

注釋:
主鍵與auto_increment 連用
字段值自動增長 +1
主鍵 并且 數(shù)值類型

例:建表的時候指定主鍵字段
-PRIMARY KEY(字段名)
mysql>create table ku.abc2(
>id  int(3)  auto increment,
>name  varchar(5)  not null,
>age   int(2)  not null,
>primary key(id)
>);

mysql>desc ku.abc2;
 Field  Type  Null  Key  Default    Extra
..    ..    ..     PRI     ..      ..

mysql>insert into ku.abc2 values(2,"wang",23);
mysql>select * from ku.abc2;

在已創(chuàng)建的表中設(shè)置PRIMARY KEY字段
格式:alter table 庫名.表名 ADD PRIMARY KEY(字段名);

刪除指定表的PRIMARY KEY字段
格式:alter table 庫名.表名 DROP PRIMARY KRY;
注意:如果有自增屬性(AUTO_INCREMENT),必須先刪除。

例:
mysql>alter tabel ku.abc2  drop primary key;
mysql>alter table ku.abc2 add primary key(id);

3.UNIQUE:唯一索引
3.1一個表中可以有多個UNIQUE字段。
3.2對應(yīng)字段的值不允許有重復(fù)。
3.3UNIQUE字段的KEY標志是UNI。
3.4UNIQUE字段的值允許為NULL,當將其修改為不允許為NULL時,則此字段限制于主鍵相同,KEY會變?yōu)镻RI。

例:建表的時候指定UNIQUE字段
-UNIQUE(字段1),UNIQUE(字段2)...
mysql>create table ku.abc3(
>id char(6),
>name  varchar(4)  not null,
>age int(3)  not null,
>unique(id),unique(name),unique(age)
>);

mysql>desc ku.abc3;
Field   Type    Null      Key    Default   Extra
..     ..    YES    UNI     ..      ..

mysql>insert into ku.abc3 values(3,"wang",23);
mysql>insert into ku.abc values(4,"lisi",23);
mysql>select * from ku.abc3;

在已創(chuàng)建的表中設(shè)置UNIQUE字段
格式:create unique index unique字段名 on 庫名.表名(字段名);

刪除指定表的UNIQUE字段
格式:drop index unique字段名 on 庫名.表名(字段名);

例:
mysql>drop  index name on  ku.abc3; #于刪除INDEX索引的方法相同。
mysql>create unique  index name on ku.abc3(age);

4.FOREIGN KEY:外鍵
4.1讓當前表字段的值在另一個表字段的值中的范圍內(nèi)選擇。

外鍵的使用條件:
1.表的存儲引擎必須是innodb。
2.兩表的字段類型要一致。
3.被參照字段必須要是主鍵類型(PRIMARY KEY)。

基本用法:
格式:foreign key(表A的字段名) references 表B(字段名)
on update cascade on delete cascade #參照表為B,即從B表字段的值中的范圍內(nèi)選擇。

例:
提示:被參照字段必須要是主鍵類型(PRIMARY KEY)。
mysql>create table  ku.abc4(
>id  int(4),
>name char(5),
>foreign key(name),
>references  abc3(name),
>on update  cascade
>on  delete cascade
>engine=innodb
>);

刪除外鍵字段
格式:alter table 表名 drop foreign key 約束名;

例:
mysql>show create table  ku.abc4\G;
...
CONSTRAINT `xxx`    #`xxx`里面是約束名
.....

mysql>alter table ku.abc4 drop foreigen key xxx ;
向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI