索引
一、索引的介紹
1、什麼是索引?
(1)定義:索引是一種資料結構
一個索引在儲存的表中的資料結構;
(2)索引是在表的欄位上建立的
(3)索引包含了一列值,這個值儲存在一個資料結構中
2、索引作用?
(1)保證資料記錄的唯一性
(2)實現表與表之間的參照性
(3)減少排序和分組的時間(例如在使用order by ,group by 查詢語句中進行資料檢索)
(4)可以使用索引快速訪問資料庫中指定資訊
3、索引的缺點?
(1)索引要佔實體記憶體
(2)索引對錶進行增刪改查,索引要動態維護,降低資料的維護速度
4、索引的分類
(1)普通索引
index 簡稱 mul 最基本的索引,沒有任何限制
(2)主鍵索引
primary key 簡稱 pri 是一種唯一索引,不能為空
(3)唯一索引
unique 簡稱 uni 是一種唯一索引,可為空,一個表中可以有多個唯一索引
以下作為了解下:
(4)全文索引
(5)組合索引
(6)單列索引
(7)聚焦索引
(8)非聚焦索引
==========================================
二、索引的應用
1、索引的查詢
方法一:
格式1:
格式:show INDEX from 表名;
案例:show INDEX from emp ;
方法二:
格式:show keys from 表名;
案例:show KEYS from student2 ;
(2)檢視錶結構,透過表結構檢視索引
desc 表名
(3)建立普通索引
第一種情況:索引名和欄位名不一致
格式:ALTER table 表名 add INDEX 索引名(欄位名);
案例:ALTER table student2 add INDEX sym(sex);
簡寫:mul
第二種情況:索引名和欄位名一致
格式:ALTER table 表名 add INDEX (欄位名);
案例:ALTER table student2 add INDEX (age);
(4)唯一索引(唯一,為空,在一個表可以有多個唯一索引)
單詞:unique
簡寫:uni
第一種情況:新增唯一索引名和欄位名不一致
格式:
alter table 表名 add UNIQUE 索引名(欄位名)
案例:
alter table student2 add UNIQUE aa(name)
第二種情況:新增唯一索引名和欄位名一致
格式:
alter table 表名 add UNIQUE (欄位名)
案例:
alter table student2 add UNIQUE (name)
(5) 新增主鍵索引 (唯一,不能為空,一個表中只有一個主鍵)
單詞:primary key 主鍵
簡寫:pri
格式:
ALTER table 表名 add PRIMARY key (欄位名) ;
案例:
ALTER table student2 add PRIMARY key (id) ;
(6)刪除索引:
1、第一種情況:刪除普通索引和唯一索引是通一種方法
格式:
alter table 表名 drop INDEX 索引名
案例:
alter table student2 drop INDEX aa;
2、第二種情況:刪除主鍵索引
格式:
alter table 表名 drop primary key;
案例:
alter table student2 drop primary key ;
===============================================
二、建立方法二
格式:create INDEX 索引名 on 表名 (欄位名)
案例:create INDEX aa on student2 (english)
===============================================
三、建表時建立索引
格式:
CREATE table 表名( 欄位名 欄位型別(字元長度) PRIMARY key ,欄位名 字元型別(字元長度) UNIQUE )) ;
案例:
CREATE table wzx( id int(10) PRIMARY key ,name VARCHAR(20) UNIQUE ,age int(10)) ;
索引是對錶的一列資料起到約束作用
===========================================
面試題:
-
什麼是索引?
索引是資料庫表中一個或多個列的值儲存的資料結構,它允許資料庫快速檢索和操作表中的資料。類似於書籍的目錄,索引提供了一種快速定位資料行的方法,而不需要掃描整個表。 -
索引的作用
- 提高查詢速度:索引可以顯著加快資料檢索的速度,因為索引允許資料庫引擎直接跳到所需的資料塊,而不是掃描整個表。
- 加速表連線:對於經常需要進行連線操作的表,索引可以提高連線的速度。
- 維護資料的唯一性:唯一索引可以確保列中的值是唯一的。
- 排序和分組:索引可以幫助資料庫更快地執行排序和分組操作。
-
索引有哪些?
- 主鍵索引:唯一標識表中每條記錄的索引。
- 唯一索引:保證列中的值是唯一的,但允許有空值。
- 複合索引:在兩個或多個列上建立的索引,用於加速涉及這些列的查詢。
- 全文索引:支援在文字列中進行全文搜尋。
- 空間索引:用於地理空間資料型別,以最佳化空間資料的查詢。
- 普通索引:最基本的索引型別,沒有唯一性要求。
- 覆蓋索引:包含查詢中所有列的索引,可以避免訪問表中的實際資料行。
-
如何建立索引?
建立索引的基本語法如下:-- 建立表時直接新增索引 CREATE TABLE table_name ( column1 datatype, column2 datatype, INDEX index_name (column1), INDEX index_name (column2) ); -- 向現有表新增索引 CREATE INDEX index_name ON table_name (column); -- 為多個列建立複合索引 CREATE INDEX index_name ON table_name (column1, column2);
在這裡,
table_name
是表名,column
是您要建立索引的列名,index_name
是您為索引指定的名稱。 -
主鍵索引和唯一索引的區別?
- 主鍵索引:表中每條記錄的主鍵值必須是唯一的,並且不能為空(NOT NULL)。一個表只能有一個主鍵索引。
- 唯一索引:保證索引列的值是唯一的,但允許有空值(NULL)。一個表可以有多個唯一索引。
兩者都確保了列值的唯一性,但主鍵索引還具有表中每條記錄都必須有一個唯一識別符號的額外含義,而唯一索引則沒有這樣的要求。此外,主鍵索引通常在表建立時定義,並且在資料庫設計中扮演著核心角色。
資料庫之外來鍵
==========================、
一、外來鍵的介紹
1、外來鍵的定義
讓一張表記錄的資料不要太過於冗餘,在資料庫中對錶的關係進行解耦,儘量讓表的資料單一化。
2、外來鍵的作用
保持資料的一致性和完整性
3、msyql 資料庫中的儲存引擎?
myisam (預設)
innodb (外來鍵需要用到innodb儲存格式)
4、檢視儲存引擎
格式:show table status from 庫名 where name='表名' ;
案例:show table status from hz017 where name='student2' ;
5、儲存型別:myisam (預設)
5、檢視外來鍵方法:
(1)在navicat中檢視
(2)
格式:show create table 表名;
案例:show create table cc
==================================================
二、外來鍵運用
(一)建表時建立外來鍵
(1)建立 engine=INNODB 格式
格式:
CREATE table 表名 (欄位名 欄位型別(字元長度) PRIMARY key , 欄位名 字元型別(字元長度) ,constraint 外來鍵名 FOREIGN key(子表欄位)
REFERENCES 父表(父表欄位)) engine=INNODB ;
案例:
父表
create table ss (id int(10) PRIMARY key, name varchar(20) )ENGINE=INNODB ;
子表
CREATE table cc (cid int(10) PRIMARY key ,cname VARCHAR(20) ,constraint wj FOREIGN key(cid)
REFERENCES ss(id)) engine=INNODB ;
constraint 外來鍵 名 (指定外來鍵名)
FOREIGN key 子表欄位 指定的欄位
REFERENCES 父表(父表欄位) 引用外部表的主鍵
(二)建表以後再新增外來鍵
格式:
alter TABLE 子表 add CONSTRAINT 外建名 FOREIGN key (子表欄位) REFERENCES 父表(父表欄位)
(1)新建兩個表
父表
create table xx (id int(10) PRIMARY key ,name varchar(20))engine=INNODB ;
子表
create table yy (yid int(10) PRIMARY key ,yame varchar(20))engine=INNODB ;
select * from xx ;
SELECT * from yy;
show create table yy;
alter TABLE yy add CONSTRAINT wjm FOREIGN key (yid) REFERENCES xx(id)
==============================================================================
刪除外來鍵:
格式:ALTER TABLE 表名 drop foreign key 外來鍵名;
案例:ALTER TABLE yy drop foreign key wjm ;
=======================================================================
外來鍵特點:
外來鍵實際操作:
1、當父表不存在的資料,子表也無法插入資料(子表無法插入資料)
2、父表中存在的資料,子表就可以插入資料(插入資料)
3、刪除資料,子表中存在的資料,直接刪除父表是無法刪除 (要先刪除子表資料,在刪除父表資料)
4、刪除父表的資料,先刪除子表,在刪除父表
=========================================
面試題:
-
什麼是外來鍵?
外來鍵是一個表中的欄位,它與另一個表的主鍵相關聯。外來鍵用於建立兩個表之間的關係,確保資料的參照完整性。在關聯式資料庫中,外來鍵約束是一個重要的特性,它允許一張表引用另一張表的主鍵列。 -
外來鍵作用?
- 確保資料一致性:外來鍵確保引用表中的資料必須在主表中存在,從而保持資料的一致性。
- 維護資料完整性:外來鍵幫助維護資料庫的完整性,防止插入不相關的資料。
- 實現級聯操作:可以設定外來鍵的級聯規則,如級聯刪除或級聯更新,這有助於自動維護相關表中的資料。
- 定義表之間的關係:外來鍵用於定義表之間的一對一、一對多或多對多的關係。
-
如何建立外來鍵?
建立外來鍵通常在建立表時或之後透過ALTER TABLE
語句新增。以下是建立外來鍵的基本語法:-- 建立表時直接新增外來鍵 CREATE TABLE child_table ( child_column INT, FOREIGN KEY (child_column) REFERENCES parent_table (parent_column) ); -- 向現有表新增外來鍵 ALTER TABLE child_table ADD FOREIGN KEY (child_column) REFERENCES parent_table (parent_column);
在這個例子中,
child_table
是引用表,parent_table
是主表,child_column
是外來鍵列,parent_column
是主表的主鍵列。 -
如何刪除外來鍵?
刪除外來鍵使用ALTER TABLE
語句,基本語法如下:ALTER TABLE child_table DROP FOREIGN KEY foreign_key_name;
在這裡,
foreign_key_name
是外來鍵的名稱。如果您不知道外來鍵的名稱,可以透過資料庫的後設資料或系統表查詢得到。 -
公司中為什麼使用外來鍵?
在公司中使用外來鍵的原因包括:- 資料完整性:確保資料庫中的資料準確無誤,相關資料之間保持一致性。
- 資料查詢:透過外來鍵關係,可以方便地進行跨表查詢,獲取相關聯的資料。
- 資料恢復:在外來鍵的幫助下,可以更容易地恢復或回滾資料庫中的資料變更。
- 業務規則實施:外來鍵可以幫助實施業務規則,比如,如果主表中的記錄被刪除,相關聯的引用表中的記錄可以自動刪除或更新。
- 資料庫規範化:外來鍵是資料庫規範化的一個重要方面,有助於減少資料冗餘和提高資料儲存效率。
外來鍵的使用可以提高資料庫操作的準確性和效率,是資料庫設計和維護中的一個重要工具。