1. 程式人生 > >MySQL索引概述

MySQL索引概述

pre b+tree sca desc 普通 使用 範圍 自增 ref

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

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

1.INDEX:普通索引
1.1一個表中可以有多個INDEX字段。
1.2字段的值允許有重復,且可以賦NULL值。
1.3經常把做查詢條件的字段設置為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;

在已有創建的表中設置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對應字段的值不允許有重復,且不允許賦NULL值。
2.3如果有多個字段都作為primary key,稱為復合主鍵,必須一起創建。
2.4主鍵字段的KEY標誌是PRI。
2.5通常與AUTO_INCREMENT連用。
2.6經常把表中能夠唯一標示記錄的字段設置為主鍵字段。(如記錄編號字段)

註釋:
主鍵與auto_increment 連用
字段值自動增長 +1
主鍵 並且 數值類型

例:建表的時候指定主鍵字段
-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;

在已創建的表中設置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對應字段的值不允許有重復。
3.3UNIQUE字段的KEY標誌是UNI。
3.4UNIQUE字段的值允許為NULL,當將其修改為不允許為NULL時,則此字段限制於主鍵相同,KEY會變為PRI。

例:建表的時候指定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;

在已創建的表中設置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讓當前表字段的值在另一個表字段的值中的範圍內選擇。

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

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

例:
提示:被參照字段必須要是主鍵類型(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 ;

MySQL索引概述