觸發器學習之入門(增、刪、改、增刪改)


注:本文主要介紹使用觸發器自動同步增、刪、改的簡單語句學習。

       如果在查閱中發現錯誤或不當的地方歡迎留言指出,大家相互學習。謝謝!


創建測試需要的表並插入數據,爲了方便學習理解,這裏列名都用的中文。

create table a(序號 VARCHAR2(10) primary key not null,姓名 VARCHAR2(20),歲數 number(3),地址 VARCHAR2(40));

create table b(序號 VARCHAR2(10) primary key not null,姓名 VARCHAR2(20),歲數 number(3),地址 VARCHAR2(40));

insert into a values (1,'張三',18,'中國');

insert into b values (1,'張三',18,'中國');

commit;


觸發器自動同步INSERT

創建觸發器:當A表中插入數據時自動同步插入到B表

create trigger inserts

after insert on a --表a中插入數據之後觸發

for each row --行級別觸發

begin --觸發的操作如下

insert into b (序號,姓名,歲數,地址)

values(:new.序號,:new.姓名,:new.歲數,:new.地址);

end;

插入測試數據到A表

insert into a (序號,姓名,歲數,地址) values ('2','湛康穎','23','湖北');

commit;

查詢驗證可以看到A、B兩表中數據已經得到同步。

select * from   a;

select * from   b;

圖片.png

圖片.png


觸發器自動同步DELETE

創建觸發器:當A表中刪除數據時自動同步刪除B表中數據

create trigger deletes

after delete on a --表a中刪除數據之後觸發

for each row --行級別觸發

begin --觸發的操作如下

delete from b where 序號=:old.序號;

end;

刪除A表中序號爲2的數據

delete a where 序號='2';

commit;

查詢驗證可以看到A、B兩表中數據已經得到同步。

select * from a;

select * from b;

圖片.png

圖片.png


觸發器自動同步UPDATE

創建觸發器:當A表中更新數據時自動同步更新到B表

create or replace trigger updates

before update on a --表a中更新數據之後觸發

for each row --行級別觸發

begin --觸發的操作如下

update b set 序號=:new.序號,姓名=:new.姓名,歲數=:new.歲數,地址=:new.地址

where 序號=:old.序號;

end;

更新A表中序號爲1的記錄,將張三改爲李四

update a set 姓名='李四' where 序號='1';

commit;

查詢驗證可以看到A、B兩表中數據已經得到同步。

select * from a;

select * from b;

圖片.png

圖片.png

測試完成後將觸發器drop不然會影響下面操作。

drop trigger inserts;

drop trigger deletes;

drop trigger updates;


觸發器自動同步INSERT、DELETE、UPDATE

創建觸發器:當A表中有數據增刪改時自動將操作同步到B表

create or replace trigger dmls

 after update or insert or delete on a --表a中增、刪、改數據之後觸發

 for each row --行級別觸發

 begin --觸發的操作如下

     if inserting then --如果是插入時運行下列插入語句,否則運行下一個判斷

       insert into b (序號,姓名,歲數,地址)

       values(:new.序號,:new.姓名,:new.歲數,:new.地址);

     elsif deleting then --如果是刪除時運行下列刪除語句,否則運行下一個判斷

       delete from b where 序號=:old.序號;

     else --運行下列更新語句

      update b set 序號=:new.序號,姓名=:new.姓名,歲數=:new.歲數,地址=:new.地址

      where 序號=:old.序號;

     end if;

    end;

對A表進行增刪改操作進行測試

insert into a (序號,姓名,歲數,地址) values   ('3','奧巴馬','58','美國');

delete a where 序號='1';

update a set 序號='1' where 序號='3';

commit;

查詢驗證可以看到A、B兩表中數據已經得到同步。

select * from a;

select * from b;

圖片.png

圖片.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章