溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)

發(fā)布時(shí)間:2020-08-08 19:07:45 來源:網(wǎng)絡(luò) 閱讀:836 作者:湛康穎 欄目:關(guān)系型數(shù)據(jù)庫


注:本文主要介紹使用觸發(fā)器自動(dòng)同步增、刪、改的簡單語句學(xué)習(xí)。

       如果在查閱中發(fā)現(xiàn)錯(cuò)誤或不當(dāng)?shù)牡胤綒g迎留言指出,大家相互學(xué)習(xí)。謝謝!


創(chuàng)建測試需要的表并插入數(shù)據(jù),為了方便學(xué)習(xí)理解,這里列名都用的中文。

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

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

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

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

commit;


觸發(fā)器自動(dòng)同步INSERT

創(chuàng)建觸發(fā)器:當(dāng)A表中插入數(shù)據(jù)時(shí)自動(dòng)同步插入到B表

create trigger inserts

after insert on a --表a中插入數(shù)據(jù)之后觸發(fā)

for each row --行級別觸發(fā)

begin --觸發(fā)的操作如下

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

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

end;

插入測試數(shù)據(jù)到A表

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

commit;

查詢驗(yàn)證可以看到A、B兩表中數(shù)據(jù)已經(jīng)得到同步。

select * from   a;

select * from   b;

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)


觸發(fā)器自動(dòng)同步DELETE

創(chuàng)建觸發(fā)器:當(dāng)A表中刪除數(shù)據(jù)時(shí)自動(dòng)同步刪除B表中數(shù)據(jù)

create trigger deletes

after delete on a --表a中刪除數(shù)據(jù)之后觸發(fā)

for each row --行級別觸發(fā)

begin --觸發(fā)的操作如下

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

end;

刪除A表中序號為2的數(shù)據(jù)

delete a where 序號='2';

commit;

查詢驗(yàn)證可以看到A、B兩表中數(shù)據(jù)已經(jīng)得到同步。

select * from a;

select * from b;

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)


觸發(fā)器自動(dòng)同步UPDATE

創(chuàng)建觸發(fā)器:當(dāng)A表中更新數(shù)據(jù)時(shí)自動(dòng)同步更新到B表

create or replace trigger updates

before update on a --表a中更新數(shù)據(jù)之后觸發(fā)

for each row --行級別觸發(fā)

begin --觸發(fā)的操作如下

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

where 序號=:old.序號;

end;

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

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

commit;

查詢驗(yàn)證可以看到A、B兩表中數(shù)據(jù)已經(jīng)得到同步。

select * from a;

select * from b;

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)

測試完成后將觸發(fā)器drop不然會影響下面操作。

drop trigger inserts;

drop trigger deletes;

drop trigger updates;


觸發(fā)器自動(dòng)同步INSERT、DELETE、UPDATE

創(chuàng)建觸發(fā)器:當(dāng)A表中有數(shù)據(jù)增刪改時(shí)自動(dòng)將操作同步到B表

create or replace trigger dmls

 after update or insert or delete on a --表a中增、刪、改數(shù)據(jù)之后觸發(fā)

 for each row --行級別觸發(fā)

 begin --觸發(fā)的操作如下

     if inserting then --如果是插入時(shí)運(yùn)行下列插入語句,否則運(yùn)行下一個(gè)判斷

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

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

     elsif deleting then --如果是刪除時(shí)運(yùn)行下列刪除語句,否則運(yùn)行下一個(gè)判斷

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

     else --運(yùn)行下列更新語句

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

      where 序號=:old.序號;

     end if;

    end;

對A表進(jìn)行增刪改操作進(jìn)行測試

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

delete a where 序號='1';

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

commit;

查詢驗(yàn)證可以看到A、B兩表中數(shù)據(jù)已經(jīng)得到同步。

select * from a;

select * from b;

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)

觸發(fā)器學(xué)習(xí)之入門(增、刪、改、增刪改)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI