資料庫檢視,索引,觸發器

hhhaaa12138發表於2024-08-16

資料庫檢視,索引,觸發器

檢視

mySQL中的檢視是⼀種虛擬表 ,它是基於 ⼀個或多個基礎表(或其他檢視)的select查詢結果集 。虛擬表是⼀種邏輯

上的表,它不實際儲存資料,⽽是在查詢時動態⽣成結果集。因此,檢視並不是真正的表,⽽是基於⼀個或多個表

的查詢結果的⼀種“虛擬表”。

檢視可以看作是對基礎表的⼀個邏輯上的封裝,它可以隱藏基礎表的複雜性,簡化查詢操作,並提供資料安全性和

資料保護。檢視可以像表⼀樣進⾏查詢、更新、插⼊和刪除操作,但實際上它們不儲存任何資料,⽽是在查詢時動態⽣成結果集

檢視的應⽤場景包括

\

1. 簡化查詢操作:檢視可以將複雜的查詢操作封裝起來,使得⽤戶可以透過⼀個簡單的檢視來訪問需要的資料。

2. 資料安全性和資料保護:透過檢視可以限制⽤戶對某些資料的訪問許可權,保護資料的安全性。

3. 資料庫設計:檢視可以⽤於資料庫設計中,透過將多個表的資料合併到⼀個檢視中,簡化資料庫的設計和維護。
4. 效能最佳化:檢視可以提⾼查詢效能,透過將多個表的查詢結果快取到檢視中,可以避免重複查詢。

檢視是⼀個⾮常有⽤的⼯具,可以幫助我們簡化查詢操作,提⾼資料安全性和資料保護,最佳化資料庫設計和查詢效能。

檢視檢視

SHOW FULL TABLES WHERE TABLE_TYPE='VIEW';

檢視檢視詳細資訊

SHOW TABLE STATUS WHERE Name='檢視名';

檢視檢視建立定義資訊

SHOW CREATE VIEW 檢視名\G

SHOW CREATE VIEW total_product;

修改檢視

image-20240816182024798

索引概述

索引就好⽐⼀本書的⽬錄,它會讓你更快的找到內容,顯然⽬錄(索引)並不是越多越好,假如這本書1000⻚,有

500⻚也是⽬錄,它當然效率低,⽬錄是要佔紙張的,⽽索引是要佔磁碟空間的。

分類

普通索引 INDEX: 最基本的索引,沒有任何限制

唯⼀索引 UNIQUE: 與"普通索引"類似,不同的是索引列的值必須唯⼀,但允許有空值。

全⽂索引 FULLTEXT:僅可⽤於 MyISAM 表,針對較⼤的資料,⽣成全⽂索引很耗時好空間。

主鍵索引 PRIMARY KEY:它是⼀種特殊的唯⼀索引,不允許有空值。

索引測試

未建立索引

image-20240816182445239

image-20240816182842551

id : 查詢中每個 SELECT ⼦句的唯⼀識別符號。

select_type : 查詢的型別。在這個例⼦中,查詢型別為 SIMPLE ,表示這是⼀個簡單的 SELECT 查詢,不

包含⼦查詢或聯接。

table : 正在訪問的表。

partitions : 匹配的分割槽。在這個例⼦中,分割槽為 NULL ,表示沒有使⽤分割槽。

type : 訪問表的⽅式。在這個例⼦中, type 為 ALL ,這意味著 MySQL 將掃描整個表來查詢匹配的⾏。

possible_keys : 可能使⽤的索引列表。在這個例⼦中,沒有使⽤索引,因此 possible_keys 為 NULL 。

key : 實際使⽤的索引。在這個例⼦中,沒有使⽤索引,因此 key 為 NULL 。

key_len : 使⽤的索引的⻓度。在這個例⼦中,沒有使⽤索引,因此 key_len 為 NULL 。

ref : 列與索引之間的匹配條件。在這個例⼦中,沒有使⽤索引,因此 ref 為 NULL 。

rows : MySQL 估計必須掃描的⾏數。在這個例⼦中,MySQL 估計必須掃描 199949 ⾏才能找到匹配的⾏。

filtered : MySQL 掃描表後過濾⾏的百分⽐。在這個例⼦中,MySQL 掃描了整個表,但只返回了 10% 的

⾏,因此 filtered 為 10.00 。

Extra : 其他資訊。在這個例⼦中,使⽤了 WHERE ⼦句來過濾⾏,因此 Extra 為 Using where 。

建立索引後

image-20240816182405595

table : 查詢的表名,這⾥是 t5 。

partitions : 如果查詢使⽤了分割槽表,這⾥會列出使⽤的分割槽。

type : 訪問表的⽅式,這⾥是 ref ,表示使⽤了索引查詢。

possible_keys : 可能使⽤的索引,這⾥是 index_t5_id 。

key : 實際使⽤的索引,這⾥也是 index_t5_id 。

key_len : 使⽤的索引的⻓度,這⾥是 5 ,表示使⽤了⼀個 5 位元組的索引。

rows : 表示查詢掃描的⾏數,這⾥是 1 ,表示只掃描了⼀⾏。

這個查詢使⽤了 index_t5_id 索引,只掃描了⼀⾏,效能⽐較好

索引管理

image-20240816182957903

刪除索引

//刪除索引語法: DROP INDEX 索引名 ON 表名

mysql> drop index index_t5_id on t5;

觸發器

當滿⾜⼀定的條件以後,它會觸發⼀個動作的執⾏,trigger

觸發器是⼀種特殊型別的儲存過程,它是在特定的表上⾃動執⾏的程式碼。當特定的事件發⽣時,MySQL 觸發器會

被⾃動啟用。這些事件可能包括 INSERT、UPDATE 或 DELETE 操作,以及對特定列的更改。

2、觸發器的執⾏不是由程式調⽤,也不是由⼿⼯啟動,⽽是由事件來觸發、啟用從⽽實現執⾏

3、觸發器是由⼀定的事件來觸發的,對錶的增刪改操作、不包括查詢,查詢是沒有觸發器的

4、⽣產中⼀般不透過MySQL中觸發器來實現這功能,是透過Java程式、Python程式程式碼來實現觸發器

CREATE:

 [DEFINER = { user | CURRENT_USER }]

 TRIGGER trigger_name

 trigger_time trigger_event

 ON tbl_name FOR EACH ROW

 trigger_body

說明:

\1. DEFINER:指定觸發器的建立者,可以是⽤戶或當前⽤戶。

\2. TRIGGER trigger_name:定義觸發器的名稱。

\3. trigger_time:指定觸發器的觸發時間,可以是BEFORE或AFTER。

\4. trigger_event:指定觸發器的觸發事件,可以是INSERT、UPDATE或DELETE。

\5. ON tbl_name:指定觸發器所在的表名。

\6. FOR EACH ROW:表示觸發器對每⼀⾏記錄都會觸發。

\7. trigger_body:觸發器的執⾏語句體,可以是SQL語句或儲存過程。

檢視觸發器

mysql> SHOW TRIGGERS\G

刪除觸發器

#DROP TRIGGER trigger_name;

mysql> DROP TRIGGER insert_user_audit;

Query OK, 0 rows affected (0.00 sec)

#快速的清空表:truncate table table_name;

mysql> truncate table users;

Query OK, 0 rows affected (0.00 sec)

image-20240816195728149

相關文章