天天看點

資料庫索引-觸發器-存儲過程-視圖

一,資料庫索引,是資料庫管理系統中一個排序的資料結構,以協助快速查詢,更新資料庫表中的資料。

1,事務的保障:ACID。

    ACID一言以蔽之就是原子性、一緻性、隔離性、持久性事務,它是四個單詞的縮寫:

¥Atomicity,原子性,事務中的操作要麼全部完成,要麼全失敗。

¥Consistency,一緻性, 在事務開始時或者結束時,資料庫應該處于同一狀态。

¥Isolation,隔離性,事務将假定隻有它自己在操作資料庫,彼此不知曉。

¥Durablity,一旦事務完成,就不能傳回。

2,豐富的資料類型和SQL的操作方式。

    1),數字:整數和小數。整數可以分為32位,64位。

    2),字元串類型:字元串分為固定長度和可變長度。

    3),時間,  時間和日期

    4),二進制流。

3,SQL語句的結構主要分為以下幾大部分:

    1),操作,select, insert, update, delete

    2),表對象。

    3),字段範圍

    4),where

    5),order排序

    6),查詢範圍限制。

4,對資料高并發讀寫的要求。

    資料庫讀寫壓力大,    硬碟IO無法承受。一般處理方法是主從架構、讀寫分離、分庫、分表,緩解寫壓力,增強讀庫的可擴充性。

5,對海量資料的存儲和通路

存儲記錄數量有限,SQL查詢效率極低的情況下。通過分庫、分表,緩解資料增長壓力。

6,伸縮性、可用性、可靠性方面的需求。

    橫向擴充艱難,無法通過快速增加伺服器節點實作,系統更新和維護造成服務不可用。通過主從架構,增強讀庫的擴充性,利用MMM架構處理寫的瓶頸。

7,分庫分表的缺點:

    1),受業務規則影響,需求變動導緻分庫分表的維護複雜。

    2),系統資料通路層代碼需要修改。

8,主從架構缺點:

    1),Slave實時性保障。對于實時性很高的場合可能需要做一些處理( 在第一個購買增值服務的例子中,添加扣費記錄之後,在讀寫分離的場景下,立馬去從庫查詢扣費記錄不一定能查到 )。

    2),高可用性問題,Master就是那個緻命點,容易産生單點故障。

MMM缺點:本身擴充性差,一次隻能一個Master可以寫入,隻能解決有限資料量下的可用性。

mysql索引概念:

假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要占紙張的,而索引是要占磁盤空間的。

Mysql索引主要有兩種結構:B+Tree索引和Hash索引。

Hash索引

MySQL中,隻有Memory存儲引擎顯示支援Hash索引,是Memory表的預設索引類型。

因為是hash結構,每個鍵隻對應一個值,而且是散列的方式分布。是以并不支援範圍查找和排序功能。

B+數索引

二,觸發器。

1,觸發器的“自動性”。(修改一張表,其他幾個或者多個表中的備援字段會更改。)

2,觸發器的資料完整性。(復原性,要不都更改,要不都不更改。)

例子:

【mysql> drop trigger if exists deletecomment ||

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create trigger deletecomment before delete on user for each row

    -> begin

    -> delete from comment where comment.u_id=old.id;

    -> end ||

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter;

删除user表中的資料,之後會删除comment表中一條對應user表的資料。

三,存儲過程。

1、使用了存過程,很多相似性的删除,更新,新增等操作就變得輕松了,并且以後也便于管理!
2、存儲過程因為SQL語句已經預編繹過了,是以運作的速度比較快。   
3、存儲過程可以接受參數、輸出參數、傳回單個或多個結果集以及傳回值。可以向程式傳回錯誤原因。     
4、存儲過程運作比較穩定,不會有太多的錯誤。隻要一次成功,以後都會按這個程式運作。     
5、存儲過程主要是在伺服器上運作,減少對客戶機的壓力。   
6、存儲過程可以包含程式流、邏輯以及對資料庫的查詢。同時可以實體封裝和隐藏了資料邏輯。   
7、存儲過程可以在單個存儲過程中執行一系列SQL語句。   
8、存儲過程可以從自己的存儲過程内引用其它存儲過程,這可以簡化一系列複雜語句。      

例子:

-- 顯示資料庫中所有的存儲

show PROCEDURE status;

-- 檢視某個存儲過程

show create procedure sp1

--删除存儲過程

drop PROCEDURE sp1

-- 建立存儲過程

create PROCEDURE sp1() select * from h_hub_status

-- 執行存儲過程

CALL sp1()

四,視圖。

1,簡單:使用視圖的使用者不需要關系視圖中資料怎麼查詢得到的,視圖中的資料對使用者來說已經是過濾好的符合條件的結果集;

2,安全:使用視圖的使用者隻能通路他們被允許查詢的結果集,對表的權限管理并不能限制到某個列或某個行,但是通過視圖可以簡單實作;

3,資料獨立;一旦視圖的結構确定了,可以屏蔽表結構變化對使用者的影響,原表增加列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對通路者的影響。

視圖操作

視圖的操作包括建立視圖、檢視視圖、删除視圖和修改視圖。

例子:

create view view_test as select * from tn_admin    //建立視圖

create or replace view view_test as select * from tn_lock    //修改視圖

desc view_test /show fields from view_test   //檢視視圖結構

轉載于:https://my.oschina.net/u/3290532/blog/858753