MySQL學習筆記 儲存程式(二)

2021-09-30 15:25:41 字數 2679 閱讀 8647

五、儲存過程的引數型別

儲存過程的引數分為

3種型別。對於

in引數,呼叫者把乙個值傳遞給過程,過程可以對這個值進行修改,但任何修改在過程返回後對呼叫者都是不可見的。

out引數剛好相反,過程把乙個值賦值給

out引數,這個值在過程返回後可以由呼叫者訪問。

inout

引數允許呼叫者向過程傳遞乙個值,然後再取回乙個值。如果沒有為引數指定型別,其預設型別將是in。

在使用out或

inout

引數時,在呼叫過程時需要給出乙個變數名。過程可以設定引數的值,相應的變數將在過程返回時獲得那個值。如果想讓某個儲存過程返回多個結果值,

out和

inout

引數型別將非常有用。

例子:分別統計出

student

資料表裡的男生和女生人數並通過它的引數返回這兩個計數值,讓呼叫者可以訪問他們:

注:in

、out

和inout

關鍵字不適用於任何儲存函式、觸發器或事件。對於儲存函式,所有的引數都像

in引數。觸發器和事件則根本沒有任何引數。

六、觸發器

觸發器是與特定資料表相關聯的儲存過程,當相應的資料表被

insert

、delete

或update

語句修改時,觸發器將自動執行。觸發器可以被設定成在這幾種語句處理每個資料行之前或之後觸發。觸發器的定義包括一條將在觸發器被觸發時執行的語句。

觸發器的好處:

①觸發器可以檢查或修改將被插入或用來更新資料行的新資料值。這意味著我們可以利用觸發器強制實現資料的完整性。

②觸發器還可以把表示式的結果賦值給資料列作為其預設值。這使我們可以繞開資料列定義裡的預設值必須是常數的限制。

③觸發器可以在刪除或修改資料行之前先檢查它的當前內容。

觸發器建立語句的基本語法如下所示:

create trigger trigger_name

on tb1_name

for each row trigger_stmt;

下面是乙個示例:

七、事件

mysql5.1.6

及更高版本有乙個事件呼叫器,它使我們可以把資料庫操作安排在預訂時間執行。事件是乙個與時間表相關聯的儲存程式,時間表用來定義事件發生的時間、次數以及何時消失。事件非常適合用來執行各種無人值守的系統管理任務,如定期更新彙總報告、清理過期失效的資料、對日誌資料表進行輪轉等。

在預設情況下,事件排程器不會執行。要想使用事件,必須先啟用事件排程器。把以下語句新增到選項檔案中(伺服器在啟動時將讀取)

[mysqld]

event_scheduler=on

檢視時間排程器的狀態:

show variables like 'event_scheduler';

想在系統執行時停止或啟動事件排程器,可以通過改變

event_scheduler

系統變數的值(它是乙個

global

變數,你必須有

super

許可權才能修改它)。

set global event_scheduler = off;             # or 0

set global event_scheduler = on;              # or 1

注:如果在啟動伺服器時把

event_scheduler

變數設定為

disabled

,在系統執行時,你將只能檢視它的狀態,不能改變它的狀態。在此基礎上,你仍可以建立事件,但它們不能執行。

下面事件是每隔

4小時執行一次,把超過一天的資料行清除掉:

create event expire_web_session

on scheduler every 4 hour

dodelete from web_session

where last_visit < current_timestamp - interval 1 day;

every n interval

子句用來給出事件定期執行的時間間隔。

interval

值近似於

date_add()

函式裡的引數值,可以是

hour

、day

或month

。在every

子句的後面,還可以用

starts datetime

和ends datetime

選項給出事件第一次和最後一次執行的時間。預設情況下,

every

事件將在它被建立後立刻開始它的第一次執行,並將一直執行下去。

如果想建立乙個只執行一次的事件,應使用

at排程型別而不是

every

。如下所示的定義將建立乙個只執行一次的事件,在乙個小時後執行:

create event one_shot

on scheduler at current_timestamp + interval 1 hour

do  …… ;

禁用某個事件:

alter event event_name disable;

啟用已禁用的事件

alter event event_name enable;

每個事件都隸屬於某個資料庫,所以必須擁有那個資料庫的

event

許可權才能為它建立或刪除事件。

學習筆記 MySql儲存過程學習二

delimiter create procedure p showage two age int begin ifage 18 then select 成年人 else select 未成年人 endif end create procedure p showage two in age int b...

mysql學習筆記 儲存過程

sql view plain copy use test drop table if exists t8 create table t8 s1 int,primary key s1 drop procedure if exists handlerdemo delimiter create proce...

mysql儲存器學習筆記

儲存過程可以寫一條或多條的sql語句 加上mysql delimiter mysql create procedure test1 begin select from db user end query ok,0 rows affected 0.00 sec mysql call test1 1.儲...