您好,登錄后才能下訂單哦!
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 ;
免責(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)容。