mysql觸發(fā)器一個(gè)表改變另一個(gè)表也改變問(wèn)題
mysql觸發(fā)器一個(gè)表改變另一個(gè)也改變
主表:

副表:

刪除:
DELIMITER $$
USE `motooling`$$
DELIMITER ;
DROP TRIGGER IF EXISTS `pm_pg_member_delete`;
DELIMITER ;;
CREATE TRIGGER `pm_pg_member_delete` AFTER DELETE ON `user_company` FOR EACH ROW BEGIN
SELECT dep_id INTO @procId FROM department WHERE dep_code='Production_Dept' AND company_id=old.company_id;
SELECT dep_id INTO @depIds FROM department WHERE dep_id=old.dep_id AND CONCAT('|', all_upper_ids, '|') REGEXP CONCAT('|', @procId, '|');
IF old.dep_id IN (@depIds) THEN
DELETE FROM pm_pg_member WHERE pg_id=old.dep_id AND member_id=old.uid;
END IF;
END
;;
DELIMITER ;

添加:
DELIMITER $$
USE `motooling`$$
DELIMITER ;
DROP TRIGGER IF EXISTS `pm_pg_member_insert`;
DELIMITER ;;
CREATE TRIGGER `pm_pg_member_insert` AFTER INSERT ON `user_company` FOR EACH ROW BEGIN
SELECT dep_id INTO @procId FROM department WHERE dep_code='Production_Dept' AND company_id=new.company_id;
SELECT dep_id INTO @depIds FROM department WHERE dep_id=new.dep_id AND CONCAT('|', all_upper_ids, '|') REGEXP CONCAT('|', @procId, '|');
IF new.dep_id IN (@depIds) THEN
SELECT dep_id INTO @depId FROM user_company WHERE id=new.id;
SELECT uid INTO @uid FROM user_company WHERE id=new.id;
SELECT work_name INTO @workName FROM user_company WHERE id=new.id;
SELECT is_leader INTO @isLeader FROM user_company WHERE id=new.id;
SELECT pri INTO @pri FROM user_company WHERE id=new.id;
SELECT is_schedule INTO @isSchedule FROM user_company WHERE id=new.id;
SELECT skill_level_id INTO @skillLevelId FROM user_company WHERE id=new.id;
SELECT skill_level_name INTO @skillLevelName FROM user_company WHERE id=new.id;
SELECT furlough_start_date INTO @furloughStartDate FROM user_company WHERE id=new.id;
SELECT furlough_end_date INTO @furloughEndDate FROM user_company WHERE id=new.id;
SELECT is_show_effic INTO @isShowEffic FROM user_company WHERE id=new.id;
SELECT work_state INTO @workState FROM user_company WHERE id=new.id;
SELECT last_pop_id INTO @LastPopId FROM user_company WHERE id=new.id;
SELECT handler_id INTO @handlerId FROM user_company WHERE id=new.id;
SELECT created_at INTO @createdAt FROM user_company WHERE id=new.id;
SELECT updated_at INTO @updatedAt FROM user_company WHERE id=new.id;
SELECT STATUS INTO @status FROM user_company WHERE id=new.id;
INSERT INTO pm_pg_member (pg_id, member_id, member_name, is_leader, pri, is_schedule, skill_level_id, skill_level_name,
furlough_start_date, furlough_end_date, is_show_effic, member_status, last_pop_id,
handler_id, created_at, updated_at, STATUS) VALUES
(@depId,@uid,@workName,@isLeader,@pri,@isSchedule,@skillLevelId,@skillLevelName,@furloughStartDate,@furloughEndDate,@isShowEffic,@workState
,@LastPopId,@handlerId,@createdAt, @updatedAt,@status);
END IF;
END
;;
DELIMITER ;
修改:
DELIMITER $$
USE `motooling`$$
DELIMITER ;
DROP TRIGGER IF EXISTS `pm_pg_member_update`;
DELIMITER ;;
CREATE TRIGGER `pm_pg_member_update` AFTER UPDATE ON `user_company` FOR EACH ROW BEGIN
SELECT dep_id INTO @procId FROM department WHERE dep_code='Production_Dept' AND company_id=new.company_id;
SELECT dep_id INTO @depIds FROM department WHERE dep_id=new.dep_id AND CONCAT('|', all_upper_ids, '|') REGEXP CONCAT('|', @procId, '|');
IF new.dep_id IN (@depIds) THEN
UPDATE pm_pg_member SET pg_id=new.dep_id, member_id=new.uid, member_name=new.work_name, is_leader=new.is_leader, pri=new.is_leader, is_schedule=new.is_schedule,
skill_level_id=new.skill_level_id, skill_level_name=new.skill_level_name,
furlough_start_date=new.furlough_start_date, furlough_end_date=new.furlough_end_date, is_show_effic=new.is_show_effic,
member_status=new.work_state, last_pop_id=new.last_pop_id,
handler_id=new.handler_id, created_at=new.created_at, updated_at=new.updated_at, STATUS=new.status
WHERE pg_id=old.dep_id AND member_id=old.uid;
END IF;
END
;;
DELIMITER ;注:刪除只有old,新增只有new,修改既有old又有new
mysql觸發(fā)器:A表更新B表新增
創(chuàng)建觸發(fā)器
CREATE TRIGGER T_TRIGGER_UPDATE? BEFORE|AFTER UPDATE|INSERT|DELETE ON 表A FOR EACH ROW BEGIN ? ? insert into 表B(列1, 列2, ...) VALUES(NEW.列1, NEW.列2, ...); END
解釋?zhuān)?/strong>
T_TRIGGER_UPDATE為觸發(fā)器名字;BEFORE|AFTER UPDATE|INSERT|DELETE:在更新之前或之后進(jìn)行更新,插入或刪除操作;
NEW表示進(jìn)行相應(yīng)操作的數(shù)據(jù),如進(jìn)行更新A表的操作,就表示要修改的A表的數(shù)據(jù)。
查看輸出器
SHOW TRIGGERS;
刪除指定的觸發(fā)器
DROP trigger T_TRIGGER_UPDATE
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
超詳細(xì)mysql left join,right join,inner join用法分析
比較詳細(xì)的mysql的幾種連接功能分析,只要你看完就能學(xué)會(huì)的好東西2008-08-08
Mysql LONGBLOB 類(lèi)型存儲(chǔ)二進(jìn)制數(shù)據(jù) (修改+調(diào)試+整理)
代碼來(lái)自網(wǎng)絡(luò),我學(xué)習(xí)整理了一下,測(cè)試通過(guò),下面的參數(shù)需要設(shè)置為你自己的2009-07-07
MySQL數(shù)據(jù)庫(kù)遷移實(shí)戰(zhàn)
數(shù)據(jù)庫(kù)遷移是指將一個(gè)數(shù)據(jù)庫(kù)從一種系統(tǒng)轉(zhuǎn)移到另一種系統(tǒng)或從一臺(tái)服務(wù)器遷移到另一臺(tái)服務(wù)器的過(guò)程,本文主要介紹了MySQL數(shù)據(jù)庫(kù)遷移實(shí)戰(zhàn),感興趣的可以了解一下2023-11-11
MySQL閃回(flashback)原理與實(shí)戰(zhàn)
摘要: 本文將介紹閃回原理,給出筆者的實(shí)戰(zhàn)經(jīng)驗(yàn),并對(duì)現(xiàn)存的閃回工具作比較。這是目前為止,MySQL 閃回領(lǐng)域第一篇全面深入的實(shí)戰(zhàn)總結(jié)。2017-01-01
mysqldump備份數(shù)據(jù)庫(kù)時(shí)排除某些庫(kù)的實(shí)例
下面小編就為大家?guī)?lái)一篇mysqldump備份數(shù)據(jù)庫(kù)時(shí)排除某些庫(kù)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
php后臺(tái)經(jīng)常提示無(wú)法連接mysql 刷新后又可以訪問(wèn)的解決方法
這幾天有一臺(tái)MySQL數(shù)據(jù)庫(kù)服務(wù)器出現(xiàn)了頻繁的掉線情況,通過(guò)排查,并沒(méi)有排查出哪個(gè)網(wǎng)站被攻擊,百思不得其解中的時(shí)候,群里有個(gè)朋友說(shuō)是因?yàn)槲④汯B967723造成的,網(wǎng)上搜索了一下,果然很多人都是這樣的問(wèn)題,都是windows系統(tǒng)下安裝的MySQL造成的2011-05-05
mysql 直接拷貝data 目錄下文件還原數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了mysql 直接拷貝data 目錄下文件還原數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

