二十八 觸發器

2021-09-28 23:19:48 字數 2643 閱讀 6676

觸發器定義: 觸發器(trigger)是指事先為某張表繫結好一段**,當表中的某些內容發生改變的時候,系統會自動觸發**、執行;

觸發器的組成部分: 事件型別,觸發時間,觸發物件

事件型別的分類: 增(insert)、刪(delete)、改(update)三種型別;

觸發時間的分類: 前(before)、後(after)

觸發物件: 表中的每一條記錄(行)

注: 一張表中只能擁有一種觸發時間的一種型別的觸發器,也就是說一張表最多只能有6個觸發器;

在mysql高階結構中,沒有{},都是用對應的字母符號代替,建立觸發

器的基本語法如下:

delimiter 自定義符號;

//後續**只有碰到自定義符號才算結束

create

trigger 觸發器名 觸發時間 事件型別 on 表名 for each row

begin

//代表左大括號..

...//裡面就是觸發器的內容,每行內容都必須使用語句結束符,分號「;」

end//代表右大括號

自定義符號

delimiter

;

例項:

//首先建立如下的表

create

table

ifnot

exists my_goods(

id int

primary

keyauto_increment

, name varchar(20

)not

null

, price decimal(10

,2)default1,

inv int

comment

'庫存數量');

create

table

ifnot

exists my_order(

id int

primary

keyauto_increment

, g_id int

notnull

comment

'商品id'

, g_number int

comment

'商品數量');

//為表建立觸發器

delimiter $$

create

trigger after_my_order after

insert

on my_order for each row

begin

update my_goods set inv=inv-

1where id =2;

end$$

delimiter

;

建立結果:

附: 上述觸發器仍存在一定問題,他是每次當乙個表插入資料時,他自己表中的某個字段資料減1,而我們需要的是讓他所減的數字不能永遠為1,而要是減其插入的資料的大小(修改會在5的例項中提到)。

基本語法:show triggers [like 『patterns』];

檢視觸發器建立語句:show create trigger 觸發器名;

注: 所有的觸發器都會儲存到information_schema.tirggers表中;

例項:

//檢視所有觸發器

show triggers;

//搜尋以after_開頭的觸發器

show triggers like

'after_%'

;//檢視上面觸發器建立語句

show

create

trigger after_my_order;

附加: 觸發器不需要手動呼叫,而是當某種情況發生時會自動觸發執行。

觸發器不能直接修改,只能先刪除掉舊的觸發器,然後再新增新的觸發器即可。

刪除觸發器的基本語法:drop trigger 觸發器名;

觸發器的記錄簡介: 不管觸發器是否觸發了,只要 當某種操作準備執行,系統就會將當前要操作的記錄的當前狀態和即將執行之後新的狀態分別保留下來,供觸發器使用;其中,要操作的當前狀態儲存在old中,操作之後的可能形態儲存在new中。由此易得, 刪除時沒有new,插入的時候是沒有old的

new和old介紹: old和new都是代表記錄本身,任何一條記錄除了有資料,還有字段、名字

new和old的使用:old.欄位名;new.欄位名;

例項: 重新設計2的例項中的觸發器

delimiter $$

create

trigger after_my_order after

insert

on my_order for each row

begin

update my_order set inv = inv - new.g_number where id = new.id;

end$$

delimiter

;

至此,即可完成2中要實現的功能。

二十八 模組

模組 在電腦程式的開發過程中,隨著程式 越寫越多,在乙個檔案裡 就會越來越長,越來越不容易維護。為了編寫可維護的 我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的 就相對較少,很多程式語言都採用這種組織 的方式。在python中,乙個.py檔案就稱之為乙個模組 module 使用模組有...

Lua程式設計(二十八)

lua語言會在執行源 之前先對其進行預編譯。生成預編譯檔案 也被稱為二進位制檔案,binary chunk 的最簡單方式是,使用標準發行班中附帶的luac程式。luac o prog.lc prog.lua上述命令會建立檔案prog.lua的預編譯版本prog.lc。lua解析器會像執行普通lua ...

CUDA學習(二十八)

多處理器級別 在更低層次上,應用程式應該最大化多處理器內各個功能單元之間的並行執行 如 硬體多執行緒 中所述,gpu多處理器依賴於執行緒級並行性來最大限度地利用其功能單元。因此利用率與駐留經線的數量直接相關。在每個指令發布時間,乙個warp排程器選擇乙個準備好執行下乙個指令的warp 如果有的話 然...