數據庫基礎_2/2

[end_label]

7.2 調用存儲過程和函數

7.2.1 調用存儲過程

call proc_name([paramter[,...]])

7.2.2 調用存儲過程

select fun_name([paramter[,...]])

7.3 查看存儲過程和函數

  1. 使用show status 語句查看存儲過程和函數的狀態

show {procedure|function} status{like 'pattern'}
2. 使用show create 語句查看存儲過程和函數的定義

show create {procedure|function} proc_name
3. 從information_schema.routine表中查看存儲過程和函數的信息

select * from information_schema.routine where routine_name='proc_name'

7.4 修改存儲過程和函數

alter {procedure|function} proc_name{characteries ... };

7.5 刪除

drop procedure proc_name
drop function fun_name

觸發器

能夠激活觸發器的SQL語句:insert、delete、update

創建觸發器

  1. 創建一條執行語句的觸發器
    create trigger trigger_name before|after trigger_event on table_name for each row trigger_simt
    trigger_event:觸發執行條件,insert delete insert
    trigger_simt:激活觸發器後執行的SQL語句
  2. 創建多條執行語句的觸發器
    create trigger trigger_name before|after trigger_event on table_name for each row begin trigger_simit end

查看觸發器

  1. 通過show triggers語句查看

show triggers \G
2. 通過查看系統表triggers實現查看
use information_schema
select * from triggers

刪除觸發器

drop trigger trigger_name

事務和鎖

事務

  1. 特性:原子性(A)、一致性©、隔離性(I)、持久性(D)。
  2. redo日誌:事務執行時需要將執行的事物日誌寫入redo日誌文件裏,在Mysql崩潰時會重新執行redo日誌中的記錄
  3. undo日誌:主要用於事務異常時的數據回滾,即就是複製事務前的數據庫內容到undo緩衝區,然後在合適的時間將內容刷新到磁盤。

控制語句

begin:開啓事務
commit:結束事務
rollback:回滾事務
Mysql可通過set autocommit、start transaction、commit和rollback 支持本地事務
start transaction|begin|work|commit [work][and [no] chanin] [[no] release] rollback [work] [and [no] chain] [[no] release] set autocommit ={0|1}

隔離級別

A查B改

  • 未提交讀(read uncommitted) == 髒讀:回滾後A查詢兩次的值不一樣,A可以查看到B修改過程中的內容
  • 提交讀(read commited) == 不可重複讀:提交後A可以查到B修改後的內容,查詢的數據不一致
  • 可重複讀(repeatable read) Mysql默認== 幻讀:提交後A查不到B修改的內容,各是各的,但是A更新B修改的內容是可以的,而且更新後又可以查到B修改的內容
  • 可串行化(serializable):級別最高,可能出現大量超時和鎖競爭

查看事務隔離級別:select @@global.tx_isolation

InnoDB鎖機制

鎖的類型

  1. 共享鎖(S):粒度是行或者元組(多個行),獲取該鎖,可執行讀操作
  2. 排他鎖(X):粒度是行或者元組(多個行),獲取該鎖,可執寫讀操作

如果A有共享鎖,則不可同時加排他鎖,可同時加共享鎖
如果A有排他鎖,則不可同時加共享鎖,也不可同時加共享鎖
3. 意向鎖:粒度是整張表

  • 意向排他鎖(IX)
  • 意向共享鎖(IS):有意對數據上共享鎖和排他鎖
    鎖之間要麼相容要麼相斥

鎖粒度

  1. 表鎖:開銷小,允許併發量最小 - MyISAM
  2. 行鎖:允許併發量最大,- InnoDB
    eg: select ... lock in share mode
    ``select … for update
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章