1. 程式人生 > 其它 >從0學習MySQL系列(三)概念篇

從0學習MySQL系列(三)概念篇

概要


在篇文章中提過:概念:資料庫管理系統(Database Management System)一些語法的彙總點。

增刪改查是基本的操作語法。對於一些概念,主鍵,外來鍵,表,事務,鎖,儲存過程,檢視,觸發器,分割槽等概念,請參考上面的文章。概念是晦澀難看,但是有時候又忍不住多看幾眼。

內容:主鍵,外來鍵,檢視,儲存過程,觸發器,事務,鎖。

主外來鍵


使用表:Department,Employee

主鍵是唯一標識一張表的資料,不允許為NULL,不允許重複,保證了資料的完整性。

外來鍵是另一張表的主鍵,外來鍵可以為NULL,可以有重複,與其他表建立聯絡。

圖中有兩個表,分別是:Department,Employee表,其中,DeptID、EmpID分別是這兩個表的主鍵,DeptID是Employee表的外來鍵。

程式碼:

create database DB_Company;
use DB_Company;

-- 建立Department 部門表
create table Department(
    DeptID int primary key auto_increment not null,
    DeptName varchar(20) not null,
    Description varchar(100)
)

-- 建立員工表
create table Employee (
    EmpID int primary key auto_increment not null,
    EmpName varchar(10) not null,
    Gender varchar(4) not null,
    Age int(2) not null,
    foreign key(EmpID) references Department(DeptID)
)         

檢視


建立檢視,檢視是一種虛擬存在的表,對於使用檢視的使用者來說是透明的。檢視具有簡單、安全、資料獨立等優點。

建立檢視employee_view的語法:

create or replace view employee_view as select * from Employee

MySQL檢視的定義有一些限制。from後面不能包含子查詢。如果輸入是從別的資料庫遷移過來的,可以先將子查詢的內容定義為檢視。

另外,包含聚合函式(SUM(),MIN(),MAX(),COUNT())、DROUP BY、HAVING、UNION等的檢視不可更新。

包含常量檢視,Select中包含子查詢的,JION連線查詢的檢視都是不可更新的。

drop view employee_view; -- 刪除檢視

檢視檢視,從MySQL5.1版本以上,沒有show views 這個檢視檢視的命令了,使用show table status

show table status like "employee_view" 

-- 如果要查詢employee_view檢視的定義
show create view employee_view 

儲存過程


什麼是儲存過程呢?什麼是函式呢?儲存過程和函式,其實是事先經過編譯的、並存儲在資料庫中的一段SQL語句的集合。

函式嘛,要有返回值,而儲存過程不需要返回值。儲存過程的引數可以使用IN,OUT,INOUT,但是函式只能用IN型別的。

儲存過程中可以執行提交,或者是回滾。提交即確認之前的修改,回滾即放棄之前的修改。儲存過程不允許執行LOAD DATA INFILTE 語句,此外,儲存過程可以呼叫其他的儲存過程。

create procedure employee_in_stock(in EmpID int, in EmpName varchar,
 in Gender varchar, in Age int)
Reads SQL Data
BEGIN
     ......
     ......
     .......
     
END

直接執行SQL和呼叫儲存過程的效果是一樣的,使用儲存過程的優點在於處理邏輯封裝在資料庫中,呼叫的時候不需要知道真正去了解中間的處理邏輯。即使中間的邏輯發生了變化,修改即可,對程式沒有預知內的影響。其餘知識點不贅述。(包括變數的使用、流程的控制、時間排程器、儲存過程的刪除等)

事務


事務具有四種性質:

原子性:一組事務,要麼成功;要麼撤回。

穩定性 : 有非法資料(外來鍵約束之類),事務撤回。

隔離性:事務獨立執行。一個事務處理後的結果,影響了其他事務,那麼其他事務會撤回。事務的100%隔離,需要犧牲速度。

可靠性:軟、硬體崩潰後,InnoDB資料表驅動會利用日誌檔案重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什麼時候吧事務儲存到日誌裡。

索引


MySQL索引。首先,MySQL的索引是在儲存引擎層面實現的,並不是在伺服器層面實現的。所以每一種的儲存引擎的索引都是不是完全相同的。MySQL目前提供了一下4種索引。

B-Tree索引:最常見的搜尋引擎。大部分的搜尋搜尋引擎是支援B-Tree。

Hash索引:這個搜尋引擎只有Memory引擎支援。

R-Tree索引:又稱為空間索引。空間索引要是MyISAM的一個特殊搜尋引擎。

Full-text:全文索引。全文索引也是MyISAM的一個特殊的索引型別。InnoDB 從MySQL 5.6版本開始提供了對全文的支援。

三種引擎對四種索引的支援情況

索引

MyISAM引擎

Memory引擎

InnoDB引擎

B-Tree

Y

Y

Y

Hash

N

Y

N

R-Tree

Y

N

N

Full-text

Y

N

N