NoteOfMySQL 10 觸發器與事件

2022-07-15 03:57:08 字數 3547 閱讀 7155

觸發器是由事件來觸發某個操作,這些事件包括insert語句、update語句、delete語句,當資料庫系統執行這些事件時,就會啟用觸發器執行相應的操作。

事件排程器(event schedule)用作定時執行某些特定任務來取代原先只能由作業系統的計畫任務來執行的工作。

create trigger trigger_name trigger_time trigger_event on table_name for each row trigger_statement;
引數

引數值說明

trigger_statement

sql語句

執行語句,可放在begin…end中

trigger_name

string

觸發器名稱

trigger_time

``trigger_event

`{insert

update

-- 法一:顯示所有的觸發器

show triggers;

-- 法二:若省略where子句也顯示所有的觸發器

select * from information_schema.triggers[ where trigger_name = trigger_name];

drop trigger [database_name.]trigger_name;
其中,若省略database_name,則刪除當前資料庫的觸發器。

觸發器訪問影響的行的列

insert觸發器

new.col_name

delete觸發器

old.col_name

update觸發器

old.col_name, new.col_name

before觸發器

當具有update許可權時,可用set new.col_name=value;

-- 建立product表

create  table  product (

id  int(10)  not null unique primary key,

name varchar(20)  not null,

function varchar(50) ,

company varchar(20)  not null

address varchar(50)

);-- 建立operate表

create table operate (

op_id  int(10) not null unique primary key auto_increment,

op_name varchar(20) not null

op_tiem  time not null

);

在product表上分別建立before insert、after update和after delete3個觸發器,觸發器的名稱分別為tproduct_bf_insert、tproduct_af_update和tproduct_af_del。執行語句部分都是向operate表插入操作方法和操作時間。

create trigger tproduct_bf_insert before insert on product for each row

insert into operate values(null, 'insert product', now());

create trigger tproduct_af_update after update on product for each row

insert into operate values(null, 'update product', now());

create trigger tproduct_af_delete after delete on product for each row

insert into operate values(null, 'delete product', now());

對product表分別執行insert、update和delete操作,分別檢視operate表。

-- 插入

insert into product values(1, 'abc','**感冒', '北京abc製藥廠','北京市昌平區');

-- 更新

update product set address='北京市海淀區' where id = 1;

-- 刪除

使用之前需要確保event_scheduler為開啟狀態。

-- 檢視狀態

show variables like 'event_scheduler';

-- 開啟

set global event_scheduler = on;

create event [if not exists] event_name on schedule schedule [on completion [not] preserve] [enable | disable] [comment 'string'] do sql_statement;
引數

引數值說明

event_name

string

事件名稱同乙個資料庫不能有相同的事件名稱

sql_statement

sql語句

sql執行語句

schedule

`at timestamp [+ interval interval]

every interval [starts timestamp] [ends timestamp]`

show events;

show create event event_name;

alter event event_name [on schedule schedule] [rename to new_name] [on complention [not] preserve] [comment 'string'] [enable | disable] [do sql_statement]
alter event event_name enable;
alter event event_name disable;
關閉事件後,若重啟mysql伺服器,則事件會被刪除。

第 10 章 觸發程式

觸發程式是使用者定義在資料表上的一類由事件驅動的特殊過程。一旦定義,任何使用者對錶的增 刪 改操作均由伺服器自動啟用相應的觸發程式。觸發程式是乙個功能強大的工具,可以使每個站點在有資料修改時自動強制執行其業務規則。通過觸發程式,可以使多個不同的使用者能夠在保持資料完整性和一致性的良好環境下進行修改操...

MySQL基礎 10 觸發器(Trigger)

本教程以mysql8為主版本 內容兼顧mysql5.7 觸發器是與表相關的資料庫物件,在滿足表資料庫定義的變化條件是觸發執行 建立觸發器的語法為 create definer user trigger trigger name trigger time trigger event on tbl na...

定時任務沒觸發 10W定時任務,如何高效觸發超時

需求背景 1.延遲訊息功能。例如 滴滴打車訂單完成後,如果使用者一直不評價,48小時後會將自動評價為5星。2.無效連線斷開。在im系統中,客戶端會與服務端建立大量的長連線,當客戶端與服務端30s內沒有心跳的話,需要把這個連線斷開。一 最傳統的方案 建立一張延遲訊息表,滴滴訂單完成後插入一條延遲訊息,...