數據庫系統(五)---MySQL基礎

1、SQL基本概念: 算法

  SQL 已經成爲關係數據庫的標準語言,是一種數據庫查詢和程序設計語言,用 於存取數據以及查詢、更新和管理關係數據庫系統。 功能不只僅是查詢,還包括數據定義、數據操縱和數據控制等於數據庫有關的 一系列功能。數據庫

  四大功能:數據查詢、數據定義、數據操縱和數據控制。編程

  1)嵌入式和動態 SQL 規則 規定了 SQL 語句在高級程序設計語言中使用的規範方法,以便適應較爲複雜的 應用。 安全

  2)SQL 調用和會話規則 調用包括 SQL 例程和調用規則,以便提升 SQL 的靈活性、有效性、共享性以 及使 SQL 具備更多的高級語言的特徵。服務器

    3)關係數據庫系統支持三級模式結構,其模式、外模式和內模式中的基本對象有 數據庫模式、表、索引、視圖等。 SQL 標準提供的數據定義語句以下表:併發

    

2、MySQL編程語言

一、MySQL基礎概念函數

  MySQL 是一個關係數據庫管理系統(RDBMS),它具備客戶/服務器體系結構。加密

      MySQL 中的 SQL 做爲一種關係型數據庫管理系統,遵循 SQL 標準,提供了對數據定義語言 DDL、數據操縱語言 DML、數據控制語言 DCL 的支持,一樣支持關係數據庫的三級模式結構。 MySQL 中一個關係對應一個基本表,一個或多個基本表對應一個存儲文件,一 個表能夠有若干索引,索引也存放在存儲文件中。spa

   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()函數。

二、索引定義

 (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;

三、視圖

  (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;
 
四、觸發器
  (1)觸發器是用戶定義在關係表上的一類由事件驅動的數據庫對象,也是一種保證數據完整性的方法。觸發器一旦定義,無須用戶調用,任何對錶的修改操做均爲數據庫服務器自動激活相應的觸發器。觸發器與表的關係十分密切,其主要做用是實現主鍵和外鍵不能保證的複雜的參照完整性和數據的一致性,從而有效地保護表中的數據。
  (2)SQL示例
   建立觸發器  create trigger trigger_name trigger_time trigger_event on table_name for each row trigger_body;
 
五、封鎖
 封鎖是最經常使用的併發控制技術,它的基本思想是:須要時,事務經過向系統請求對它所但願的數據對象加鎖,以確保它不被非預期改變。
(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)或釋放鎖階段
  定理:遵循兩段鎖協議的事務的任何併發調度都是可串行化的。
相關文章
相關標籤/搜索