觸發(fā)器
觸發(fā)器是(trigger)是個(gè)特殊的存儲(chǔ)你過程,它的執(zhí)行不是由程序調(diào)用,也不是手動(dòng)啟動(dòng),而是由事件來觸發(fā),比如當(dāng)對(duì)一個(gè)表進(jìn)行操作(INSERT,DELETE,UPDATE)時(shí)就會(huì)激活它執(zhí)行。觸發(fā)器經(jīng)常 用來加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。觸發(fā)器可以從DBA_TRIGGERS, USER_TRIGGES數(shù)據(jù)字典中查到。
觸發(fā)器語法
CREATE TRIGGER
trigger_name
TRIGGER_TIME[AFTER,BEFORE]
TRIGGER_EVENT[UPDATE,INSERT,DELETE]
ON tbl_name
FOR EACH ROW trigger_stmt
觸發(fā)器實(shí)現(xiàn)兩表同步
#同步插入
DELIMITER $$ #修改定界符
DROP TRIGGER IF EXISTS sync_apps_insert$$
CREATE TRIGGER sync_apps_insert AFTER INSERT ON rht_train.rht_apps FOR EACH ROW
BEGIN
INSERT INTO rht_idc.rhi_apps
(id, appid, appname, isreward, adesc, adetail, price, downcount, sortid, iftj, flag, apptype, appcol, imgurl, ver, vernum, iconurl, filesize, lang, appurl, package, ctime, utime, stars, signature, unconfirm, develop, typeinfo) VALUES
(NEW.id, NEW.appid, NEW.appname, NEW.isreward, NEW.adesc, NEW.adetail, NEW.price, NEW.downcount, NEW.sortid, NEW.iftj, NEW.flag, NEW.apptype, NEW.appcol, NEW.imgurl, NEW.ver, NEW.vernum, NEW.iconurl, NEW.filesize, NEW.lang, NEW.appurl, NEW.package, NEW.ctime, NEW.utime, NEW.stars, NEW.signature, NEW.unconfirm, NEW.develop, NEW.typeinfo);
END $$
DELIMITER ; #還原定界符
#同步刪除
DELIMITER $$ #修改定界符
DROP TRIGGER IF EXISTS sync_apps_delete$$
CREATE TRIGGER sync_apps_delete AFTER DELETE ON rht_train.rht_apps FOR EACH ROW
BEGIN
DELETE FROM rht_idc.rhi_apps WHERE rht_idc.rhi_apps.id=OLD.id;
END $$
DELIMITER ; #還原定界符
#同步更新
DELIMITER $$ #修改定界符
DROP TRIGGER IF EXISTS sync_apps_update$$
CREATE TRIGGER sync_apps_update AFTER UPDATE ON rht_train.rht_apps FOR EACH ROW
BEGIN
UPDATE `rht_idc`.`rhi_apps` SET `id`=NEW.id, `appid`=NEW.appid, `appname`=NEW.appname,
`isreward`=NEW.isreward, `adesc`=NEW.adesc, `adetail`=NEW.adetail, `price`=NEW.price, `downcount`=NEW.downcount,
`sortid`=NEW.sortid, `iftj`=NEW.iftj, `flag`=NEW.flag, `apptype`=NEW.apptype, `appcol`=NEW.appcol, `imgurl`=NEW.imgurl,
`ver`=NEW.ver, `vernum`=NEW.vernum, `iconurl`=NEW.iconurl, `filesize`=NEW.filesize, `lang`=NEW.lang, `appurl`=NEW.appurl,
`package`=NEW.package, `ctime`=NEW.ctime, `utime`=NEW.utime, `stars`=NEW.stars, `signature`=NEW.signature,
`unconfirm`=NEW.unconfirm, `develop`=NEW.develop, `typeinfo`=NEW.typeinfo WHERE (rht_idc.rhi_apps.id=OLD.id);
END $$
DELIMITER ; #還原定界符
如果執(zhí)行返回
Trigger in wrong schema
請(qǐng)檢查use datebases 是否是rht_train。觸發(fā)器是建立在此庫(kù)上的表,應(yīng)當(dāng)選擇此庫(kù)才能正常建立。