一、SQL基本概念:
SQL 已經成為關系資料庫的標準語言,是一種資料庫查詢和程式設計語言,用 于存取資料以及查詢、更新和管理關系資料庫系統, 功能不僅僅是查詢,還包括資料定義、資料操縱和資料控制等于資料庫有關的 一系列功能,
四大功能:資料查詢、資料定義、資料操縱和資料控制,
1)嵌入式和動態 SQL 規則 規定了 SQL 陳述句在高級程式設計語言中使用的規范方法,以便適應較為復雜的 應用,
2)SQL 呼叫和會話規則 呼叫包括 SQL 例程和呼叫規則,以便提高 SQL 的靈活性、有效性、共享性以 及使 SQL 具有更多的高級語言的特征,
3)關系資料庫系統支持三級模式結構,其模式、外模式和內模式中的基本物件有 資料庫模式、表、索引、視圖等, SQL 標準提供的資料定義陳述句如下表:

二、MySQL
1、MySQL基礎概念
MySQL 是一個關系資料庫管理系統(RDBMS),它具有客戶/服務器體系結構,
MySQL 中的 SQL 作為一種關系型資料庫管理系統,遵循 SQL 標準,提供了對資料定義語言 DDL、資料操縱語言 DML、資料控制語言 DCL 的支持,同樣支持關系資料庫的三級模式結構, MySQL 中一個關系對應一個基本表,一個或多個基本表對應一個存盤檔案,一 個表可以有若干索引,索引也存放在存盤檔案中,
MySQL 在 SQL 標準的基礎上增加了部分擴展的語言要素:包括常量、變數、 運算子、運算式、函式、流程控制陳述句和注解等,
1)常量 是指在程式運行程序中值不變的量,也稱為字面值或標量值,常量的使用格式 取決于值的資料型別,可分為字串常量、數值常量、十六進制常量、時間日期常量、位欄位值、布林值和 NULL 值,
字串常量是指用單引號或雙引號括起來的字符序列,分為 ASCII 字串常量 和 Unicode 字串常量,
十六進制值通常指定為一個字串常量,每對十六進制數字被轉換為一個 字符,其最前面有一個大寫字母 X 或小寫字母 x,
日期和時間常量是用單引號將表示日期時間的字串括起來構成的, 使用 b‘value’格式書寫位欄位值,Value 是一個用 0 或 1 書寫的二進制值,
2)變數 在 MySQL 中,變數分為用戶變數和系統變數,用戶變數前常添加一個符號 “@”,大多數系統變數前,添加兩個“@”符號,
3)運算子 MySQL 幾類編程語言中常用的運算子:
算術運算子:+(加)、—(減)、*(乘)、/(除)和%(求模)
位運算子有:&(位與)、|(位或)、^(位異或)、~(位取反)、>>(位右 移)、<<(位左移),
比較運算子:=(等于)、>(大于)、<(小于)、>=(大于等于)、<=(小 于等于)、<>(不等于)、!=(不等于)、<=>(相等或都等于空),
邏輯運算子:NOT 或!(邏輯非)、AND 或&&(邏輯與)、OR 或||(邏輯 或)、XOR(邏輯異或)
4)運算式 是常量、變數、列名、復雜計算、運算子和函式的組合, 運算式可分為字符運算式、數值型運算式和日期運算式,
5)內置函式 MySQL 包含了 100 多個函式,基本分類如下:
數學函式,例如 ABS()函式、SORT()函式; 聚合函式,例如 COUNT()函式;
字串函式,例如 ASCII()函式、CHAR()函式;
日期和時間函式,例如 NOW()函式、YEAR()函式;
加密函式,例如 ENCODE()函式、ENCRYPT()函式;
控制流程函式,例如 IF()函式、IFNULL()函式;
格式化函式,例如 FORMAT()函式;
型別轉換函式,例如 CAST()函式;
系統資訊函式,例如 USER()函式、VERSION()函式,
2、索引定義
(1)索引是 DBMS 根據表中的一列或若干列按照一定順序建立的列值與記錄行之間的對應關系表,因而索引實質上是一張描述索引列的列值與原表中記錄行之間 一一對應關系的有序表,
(2)索引在邏輯上通常包含以下幾類:
2.1)普通索引:最基本的索引型別,沒有任何限制;
2.2)唯一性索引:索引列中的所有值都只能出現一次,必須是唯一的;
2.3)主鍵:一種唯一性索引,
(3)索引存在的弊端如下:
3.1)索引是以檔案的形式存盤的,DBMS 會將一個表的所有索引保存在同一個索引檔案中,索引檔案需要占用磁盤空間,
3.2)索引在提高查詢速度的同時,卻會降低更新表的速度,
(4)相關SQL
查詢已創建的索引 show {index|indexes} {in|from} test_table;
創建索引 create index index_name on test_table(s_name,s_age);
創建索引(使用alter table的方式) alter table test_table add index index_name(s_name,s_age)
洗掉索引 drop index index_name on test_table;
洗掉索引(使用alter table的方式) alter table test_table drop index index_name;
3、視圖
(1)視圖是資料庫中的一個物件,它是資料庫管理系統提供給用戶的以多種角度觀察資料庫中資料的一種重要機制,外模式對應到資料庫中的概念就是視圖, (2)視圖仍不同于資料庫中真實存在的基本表,它們存在以下區別: 1)視圖不是資料庫中真實的表,而是一張虛擬表, 2)視圖的內容是由存盤在資料庫中進行查詢操作的 SQL 陳述句來定義的,它的列資料與行資料均來自于定義視圖的查詢所參考的真實表,并且這些資料是在參考視圖時動態生成的, 3)視圖不是以資料集的形式存盤在資料庫中,它所對應的資料實際上是存盤在視圖所參考的真實表中, 4)視圖是用來查看存盤在別處的資料的一種虛擬表,而其自身并不存盤資料, (3)使用視圖有如下優點: 1)集中分散資料; 2)簡化查詢陳述句; 3)重用 SQL 陳述句:保護資料安全;共享所需資料;更改資料格式, (4)相關SQL示例 創建視圖 create or replace view cus_view as select * from test_table where s_age = 19 with check option; 洗掉視圖 drop view cus_view; 查詢創建的視圖 show create view cus_view; 資料操作 -- 添加 insert into customers_view values(0,'ww',1,'ww','ww'); -- 更新 update customers_view set cust_name='qq' where cust_id=5; -- 洗掉 delete from customers_view where cust_id=5; -- 查詢 select * from cus_view; 4、觸發器 (1)觸發器是用戶定義在關系表上的一類由事件驅動的資料庫物件,也是一種保證資料完整性的方法,觸發器一旦定義,無須用戶呼叫,任何對表的修改操作均為資料庫服務器自動激活相應的觸發器,觸發器與表的關系十分密切,其主要作用是實作主鍵和外鍵不能保證的復雜的參照完整性和資料的一致性,從而有效地保護表中的資料, (2)SQL示例 創建觸發器 create trigger trigger_name trigger_time trigger_event on table_name for each row trigger_body; 5、封鎖 封鎖是最常用的并發控制技術,它的基本思想是:需要時,事務通過向系統請求對它所希望的資料物件加鎖,以確保它不被非預期改變, (1) 鎖 一個鎖實際上就是允許或組織一個事務對一個資料物件的存取特權,基本的封鎖型別有兩種:排他鎖和共享鎖, (2)用封鎖進行并發控制 作業原理是: (1) 若事務 T 對資料 D 加了 X 鎖,則所有別的事務對資料 D 的鎖請求都必須等待直到事務 T 釋放鎖, (2) 若事務 T 對資料 D 加了 S 鎖,則別的事務還可對資料 D 請求 S 鎖,而對資料 D 的 X 鎖請求必須等待直到事務 T 釋放鎖, (3) 事務執行資料庫操作時都要先請求相應的鎖,即對讀請求 S 鎖,對更新(插入、洗掉、修改)請求 X 鎖,這個程序一般是由 DBMS 在執行操作時自動隱含地進行, (4) 事務一直占有獲得的鎖直到結束(COMMIT 或 ROLLBACK)時釋放,因此,利用封鎖機制可以解決并發操作所帶來的三個不一致問題, (3)封鎖的粒度 以粒度來描述封鎖的資料單元的大小,DBMS 可以決定不同粒度的鎖,由最底層的資料元素到最高層的整個資料庫,粒度越細,并發性就越大,但軟體復雜性和系統開銷也就越大, (4)封鎖的級別 封鎖的級別又稱為一致性級別或隔離度, 由各種鎖的型別與其封鎖期限組合可形成不同的封鎖級別: (1)0 級封鎖 (2)1 級封鎖 (3)2 級封鎖 (4)3 級封鎖 (5)活鎖與死鎖 在并發事務處理程序中,由于鎖會使一事務處于等待狀態而調度其他事務處理,因而該事務可能會因優先級低而永遠等待下去,這種現象稱為“活鎖”,活鎖問題的解決與調度演算法有關,一種最簡單的辦法是“先來先服務”,兩個以上事務回圈等待被同組中另一事務鎖住的資料單元的情形,稱為“死鎖”,DBMS 需要提供死鎖預防、死鎖檢測和死鎖發生后的處理技術與方法,預防死鎖的辦法在作業系統中已普遍討論,其中主要有如下幾種: (1) 一次性鎖請求 (2) 鎖請求排序 (3) 序列化處理 (4) 資源剝奪 (6)可串行性 一組事務的一個調度就是它們的基本操作的一種排序,若在一個調度中,對于任意兩個事務 T1 和 T2,要么 T1 的所有操作都在 T2 所有操作之前,要么反之,則該調度室串行的,因而是正確的,通常,在資料庫系統中,可串行性就是并發執行的正確性準則,即當且僅當一組事務的并發執行調度是可串行化,才認為它們是正確的, (7)兩段封鎖法 采用兩段封鎖法是一種最簡單而有效的保障封鎖其調度是可串行性的方法,兩段鎖協議規定在任何一個事務中,所有加鎖操作都必須在所有釋放鎖操作之前,其中,事務劃分成如下兩個階段, (1) 發展(Growing)或加鎖階段 (2) 收縮(Shrinking)或釋放鎖階段 定理:遵循兩段鎖協議的事務的任何并發調度都是可串行化的,轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/113122.html
標籤:MySQL
