資料庫學習筆記 觸發器

2021-10-03 17:42:41 字數 2617 閱讀 1842

使用觸發器

刪除觸發器

建立觸發器:create trigger 觸發器名 after/before 操作作語句

建立乙個表,用來記錄資料庫操作日誌

create table order_log(id int auto_increment primary key,o_date datetime,order_num int)

new.order_num --insert觸發器**內可以引用new的虛擬表,用來訪問被插入的字段order_num,如果是在before觸發器中,new中還可以更改行的值

old.order_num --刪除觸發器**內可以引用old的虛擬表,用來訪問被刪除的字段order_num

建立觸發器:

delimiter //

create trigger trg_order_insert after insert on orders for each row--針對orders表中每一行,插入

begin

insert into order_log(o_date,ordre_num) values (now(),new.order_num);--insert觸發器**內可以引用new的虛擬表,用來訪問被插入的字段order_num,如果是在before觸發器中,new中還可以更改行的值

end

使用觸發器:

insert into orders (order_date,cust_id) values('2010-09-15',10001);

操作orders表時,會自動在order_log表中新增一條記錄

修改日誌表,新增乙個操作型別字段

alter table order_log add dml_type varchar(10);
刪除剛建立的觸發器

drop trigger trg_order_inser
建立觸發器,新增顯示操作型別

delimiter //

create trigger trg_order_insert after insert on orders for each row--針對orders表中每一行,插入

begin

insert into order_log(o_date,ordre_num,dml_type) values (now(),new.order_num,'insert');--insert觸發器**內可以引用new的虛擬表,用來訪問被插入的字段order_num,如果是在before觸發器中,new中還可以更改行的值

end

修改orders表,執行下面這行插入語句後,insert觸發器會自動執行,從而order_log表中會自動插入一條資料,

insert into orders (order_date,cust_id) values ('2020-03-10',10002)
delimiter //

create trigger trg_order_delete after delete on orders for each row--針對orders表中每一行,刪除操作

begin

insert into order_log(o_date,ordre_num,dml_type) values (now(),old.order_num,'delete');--delete觸發器**內可以引用old的虛擬表,用來訪問被刪除的字段order_num

end

修改orders表,執行下面這行刪除語句後,delete觸發器會自動執行,從而order_log表中會自動插入一條資料,

delete from orders where order_num=20010
delimiter //

create trigger trg_order_update after update on orders for each row--針對orders表中每一行更新操作

begin

insert into order_log(o_date,ordre_num,dml_type) values (now(),old.order_num,'update');--update觸發器**內可以引用new和old的虛擬表,用來訪問被刪除的字段order_num

end修改order表後,update觸發器會自動執行,從而order_log表中會自動插入一條資料,

delimiter //

create trigger trg_products_update before update on products for each row

begin

if new.prod_price>old.prod_price*1.2 then

set new.prod_price=old.prod_price*1.2;

end if;

end如果修改products表時,修改產品的**值大於修改前產品**的1.2倍,那就將修改的那條資料的產品**修改為修改前產品的**的1.2倍數值

資料庫觸發器

觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而 被直接呼叫。當對某一表進行諸如update insert delete 這些操作時,sql server 就會自動執行觸發器所定義的sql 語句,從而確保對資料...

資料庫觸發器

最近做了個觸發器的例子 create trigger tru user on user for update asif update status begin update user set stopflag 1 from inserted where user.userid inserted.us...

資料庫 觸發器

觸發器的概念 是使用者定義在關係表上的一類有事件驅動的特殊過程。一旦定義,任何對錶的增刪改操作均有伺服器自動啟用相應的觸發器,在dbms核心層進行集中的完整性控制。類似於約束,但比約束更靈活。觸發器的分類 dml觸發器 dml data manipulation language 觸發器是當資料庫伺...