柚子快報激活碼778899分享:數(shù)據(jù)庫 MySQL之觸發(fā)器
柚子快報激活碼778899分享:數(shù)據(jù)庫 MySQL之觸發(fā)器
文章目錄
MySQL觸發(fā)器什么是觸發(fā)器為什么使用觸發(fā)器創(chuàng)建觸發(fā)器添加事件刪除事件修改事件
刪除觸發(fā)器觸發(fā)器的應(yīng)用場景
MySQL觸發(fā)器
什么是觸發(fā)器
MySQL觸發(fā)器(Trigger)是一種特殊的存儲過程,它與表有關(guān),當表上的特定事件(insert,update,delete)發(fā)生時,觸發(fā)器會自動執(zhí)行??梢允褂糜|發(fā)器來實現(xiàn)數(shù)據(jù)約束,數(shù)據(jù)驗證,數(shù)據(jù)復制等功能
為什么使用觸發(fā)器
可以實現(xiàn)數(shù)據(jù)約束,數(shù)據(jù)驗證,數(shù)據(jù)復制等功能
例如:
可以創(chuàng)建一個觸發(fā)器,在向表中插入一條記錄時,自動向另一個表中插入一個記錄,從而實現(xiàn)數(shù)據(jù)復制的功能。 觸發(fā)器還可以用于實現(xiàn)數(shù)據(jù)驗證,
例如
在插入或更新數(shù)據(jù)時,檢查記錄的某些字段是否符合要求,則拒絕插入或者更新,這樣可以保證數(shù)據(jù)的完整性和一致性。
創(chuàng)建觸發(fā)器
語法:
create trigger 觸發(fā)器名稱
{before | after } {insert | update | delete} -- 觸發(fā)器類型和事件
on 表名稱
for each row -- 觸發(fā)器的作用范圍
begin
-- 觸發(fā)器執(zhí)行的操作
end;
觸發(fā)器名稱可以自定義 ,并唯一性,見名知意before / after : 表示觸發(fā)器的類型,分別表示發(fā)生前/發(fā)生后執(zhí)行insert / update / delete : 表示觸發(fā)器的事件類型,分別表示插入 / 更新 / 刪除操作on 表名稱 : 為觸發(fā)器所在的表名for each row : 表示觸發(fā)器作用的范圍,即每一行記錄都會觸發(fā)該觸發(fā)器begin 和 end之間是觸發(fā)器執(zhí)行的操作,可以是一條或者多條SQL語句
觸發(fā)器是自動執(zhí)行的,無需手動調(diào)用,當表上的特定事件(insert , update, delete ) 發(fā)生時,觸發(fā)器會自動執(zhí)行在創(chuàng)建觸發(fā)器時,可以定義觸發(fā)器的類型和事件,從而控制觸發(fā)器的時機和條件
案例:
-- 創(chuàng)建兩張表
create table table1(
id int,
name varchar(20) character set utf8
)charset = utf8;
create table table2(
id int,
name varchar(20) character set utf8
)charset = utf8;
添加事件
-- 創(chuàng)建一個觸發(fā)器,當向表中插入一條記錄時,自動向另一個表中插入一條記錄
create trigger insert_trigger_1
after insert on table1
for each row
begin
-- 觸發(fā)器的具體事件
insert into table2(id,name) values (NEW.id,New.name);
end;
添加數(shù)據(jù):
向table1表中添加數(shù)據(jù)時,會觸發(fā)insert_trigger_1觸發(fā)器,自動向table2表中添加數(shù)據(jù)
insert into table1(id,name) values (1,'張三'),(2,'李四'),(3,'王五'),(4,'趙六'),(5,'唐七'),(6,'老王');
查詢table1表
select * from table1;
查詢table2表
select * from table2;
刪除事件
-- 創(chuàng)建一個觸發(fā)器,當從表中刪除一條記錄時,自動從另一個表中刪除一條記錄
create trigger delete_trigger_1
after delete on table1
for each row
begin
delete from table2 where id = OLD.id and name = OLD.name;
end;
刪除數(shù)據(jù):
刪除table1表中數(shù)據(jù)時,會觸發(fā)delete_trigger_1觸發(fā)器,自動刪除table2表中對應(yīng)的數(shù)據(jù)
delete from table1 where id = 5 and name = '王五';
查看兩張表中的數(shù)據(jù)
select * from table1;
select * from table2;
修改事件
-- 創(chuàng)建一個觸發(fā)器,當向表中更新一條記錄時,自動更新另一個表中的記錄
create trigger update_trigger_1
after update on table1
for each row
begin
update table2 set id = NEW.id, name = NEW.name where id = OLD.id and name = OLD.name;
end;
修改數(shù)據(jù):
修改table1表中數(shù)據(jù)時,會觸發(fā)update_trigger_1觸發(fā)器,自動更新table2表中對應(yīng)的數(shù)據(jù)
update table1 set id = 10,name = '小明' where id = 6 and name = '老王';
select * from table1;
select * from table2;
刪除觸發(fā)器
drop trigger 觸發(fā)器名稱;
觸發(fā)器的應(yīng)用場景
觸發(fā)器的應(yīng)用場景包括但不限于以下幾種:
強制實施業(yè)務(wù)規(guī)則:通過在觸發(fā)器中編寫邏輯,可以在特定的表上自動執(zhí)行業(yè)務(wù)規(guī)則,例如檢查輸入的數(shù)據(jù)是否符合要求,或者限制某些操作的執(zhí)行。記錄日志變更:通過在觸發(fā)器中編寫邏輯,可以在特定的表上自動記錄數(shù)據(jù)的變更情況,例如記錄數(shù)據(jù)的修改時間、修改人等信息。復雜的默認值計算:通過在觸發(fā)器中編寫邏輯,可以在特定的表上自動計算默認值,例如根據(jù)其他字段的值計算出一個新的字段的值。數(shù)據(jù)同步:通過在觸發(fā)器中編寫邏輯,可以在多個表之間自動同步數(shù)據(jù),例如在一個表中插入一條數(shù)據(jù)時,自動在另一個表中插入相應(yīng)的數(shù)據(jù)。數(shù)據(jù)校驗:通過在觸發(fā)器中編寫邏輯,可以在特定的表上自動校驗數(shù)據(jù)的正確性,例如檢查數(shù)據(jù)的唯一性、完整性等。
總結(jié):
觸發(fā)器的應(yīng)用場景非常廣泛,可以用于強制實施業(yè)務(wù)規(guī)則、記錄日志變更、復雜的默認值計算、數(shù)據(jù)同步以及數(shù)據(jù)校驗等。在創(chuàng)建觸發(fā)器時,需要指定觸發(fā)器的名稱、觸發(fā)器所在的表、觸發(fā)器的觸發(fā)時機(如insert、update或delete操作)、觸發(fā)器的執(zhí)行次數(shù)(for each row或for each row statement)以及觸發(fā)器的邏輯。
柚子快報激活碼778899分享:數(shù)據(jù)庫 MySQL之觸發(fā)器
好文閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。