第七周(mysql索引與完整性)
1. 索引
-
索引的分類:
- 普通索引(index):最基本的索引類型,沒有唯一性之類的限制,創建普通索引的關鍵字是index
- 唯一性索引(unique):與普通索引基本相同,唯一區別就是所有值只能出現一次
- 主鍵(primary key):主鍵是一種唯一性索引
- 全文索引(fulltext):mysql支持全文檢索和全文索引,全文索引只能在varchar或text類型的列上創建
-
create index語句創建:可以在一個已有表上創建,一個表可以創建多個索引,如果一個索引列可包含多個列,中間用逗號隔開,但它們屬於同一個表,這樣的索引叫作重復索引
# 例子一: #根據xs表的學號列上的前5個字符創建一個升序索引xh_xs USE xscj; CREATE INDEX xh_xs ON xs(學號(5) ASC); #在xs_kc表的學號列和課程號列上建立一個復合索引xskc_in CREATE INDEX xskc_in ON xs_kc(學號,課程號);
-
在建立表是創建索引:索引也可以在創建表時一起創建
# 例子二: #在mytest數據庫中創建成績cj表,學號和課程號的聯合主鍵,並在成績列上創建索引 USE mytest; CREATE TABLE xs_kc( 學號 CHAR(6) NOT NULL, 課程號 CHAR(3) NOT NULL, 成績 TINYINT(1), 學分 TINYINT(1), PRIMARY KEY(學號,課程號), INDEX cj(成績) ); SHOW INDEX FROM xs_kc; //查看命令執行結果
-
alter table 語句創建
# 例子三: #在xs表的姓名列上創建一個非唯一的索引 USE xscj; ALTER TABLE xs ADD INDEX xs_xm USING BTREE(姓名); #以xs表為例(假設表中主鍵未定),創建這樣的索引,以加速表的檢索速度 ALTER TABLE xs ADD INDEX mark(出生日期,性別);
-
刪除索引
#當一個索引不在需要的時候,可以用 drop index 語句或者 alter table 語句刪除它 (1)使用 drop index: drop index 索引名 on 表名 (2)使用 alter table: alter [ignore] table 表名 drop primary key //刪除主鍵 alter [ignore] table 表名 索引名 //刪除索引 alter [ignore] table 表名 drop foreign key fk symbol //刪除外鍵 #其中,drop 子句可以刪除各種類型的索引。用戶使用 drop primary key 字句時不需要提供索引名稱,因為一個表只有一個主鍵 # 例子四: #刪除xs表上的mark索引 #刪除xs表上的mark索引 DROP INDEX mark ON xs; ALTER TABLE xs DROP INDEX mark; #如果從表中刪除列,索引可能會受影響。如果所刪除的列為索引的組成部分,則該列也會從索引中刪除。如果組成索引的所有列都被刪除,則整個索引將會被刪除。
2.Mysql 數據完整性約束
-
主鍵約束
-
作為列的完整性約束時,只需要在列定義的時候加上關鍵字primary key;
-
作為表的完整性約束時,需要在語句最后加上一條primary key(列…)子句
#創建表xs1,將姓名定義為主鍵 CREATE TABLE xs1( 學號 VARCHAR(6) NULL, 姓名 VARCHAR(8) NOT NULL PRIMARY KEY, 出生日期 DATETIME ); #當表中的主鍵為復合主鍵時,只能定義為表的完整性約束 #創建course表來記錄每門課程的學生學號、姓名、課程號、學分和畢業日期。 #其中學號、課程號和畢業日期構成復合主鍵 CREATE TABLE course( 學號 VARCHAR(6) NOT NULL, 姓名 VARCHAR(8) NOT NULL, 畢業日期 DATE NOT NULL, 課程號 VARCHAR(3), 學分 TINYINT, PRIMARY KEY(學號,姓名,畢業日期) );
-
-
替代鍵約束
-
參照完整性約束