[end_label]
7.2 調用存儲過程和函數
7.2.1 調用存儲過程
call proc_name([paramter[,...]])
7.2.2 調用存儲過程
select fun_name([paramter[,...]])
7.3 查看存儲過程和函數
- 使用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
創建觸發器
- 創建一條執行語句的觸發器
create trigger trigger_name before|after trigger_event on table_name for each row trigger_simt
trigger_event:觸發執行條件,insert delete insert
trigger_simt:激活觸發器後執行的SQL語句 - 創建多條執行語句的觸發器
create trigger trigger_name before|after trigger_event on table_name for each row begin trigger_simit end
查看觸發器
- 通過show triggers語句查看
show triggers \G
2. 通過查看系統表triggers實現查看
use information_schema
select * from triggers
刪除觸發器
drop trigger trigger_name
事務和鎖
事務
- 特性:原子性(A)、一致性©、隔離性(I)、持久性(D)。
- redo日誌:事務執行時需要將執行的事物日誌寫入redo日誌文件裏,在Mysql崩潰時會重新執行redo日誌中的記錄
- 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鎖機制
鎖的類型
- 共享鎖(S):粒度是行或者元組(多個行),獲取該鎖,可執行讀操作
- 排他鎖(X):粒度是行或者元組(多個行),獲取該鎖,可執寫讀操作
如果A有共享鎖,則不可同時加排他鎖,可同時加共享鎖
如果A有排他鎖,則不可同時加共享鎖,也不可同時加共享鎖
3. 意向鎖:粒度是整張表
- 意向排他鎖(IX)
- 意向共享鎖(IS):有意對數據上共享鎖和排他鎖
鎖之間要麼相容要麼相斥
鎖粒度
- 表鎖:開銷小,允許併發量最小 - MyISAM
- 行鎖:允許併發量最大,- InnoDB
eg:select ... lock in share mode
``select … for update