您好,登錄后才能下訂單哦!
注:本文主要介紹使用觸發器自動同步增、刪、改的簡單語句學習。
如果在查閱中發現錯誤或不當的地方歡迎留言指出,大家相互學習。謝謝!
創建測試需要的表并插入數據,為了方便學習理解,這里列名都用的中文。
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; |
創建觸發器:當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; |
創建觸發器:當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; |
創建觸發器:當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; |
測試完成后將觸發器drop不然會影響下面操作。
drop trigger inserts; drop trigger deletes; drop trigger updates; |
創建觸發器:當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; |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。