使用觸發器
刪除觸發器
建立觸發器: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 觸發器是當資料庫伺...