我编写了一个触发器,它将记录从表members_new转移到members_old
。触发器的功能是在members_old
中插入后的上将记录插入members_new
。所以假设一条记录被插入members_new
之类的
nMmbID nMmbName nMmbAdd
1 Abhi Bangalore
此记录将插入members_old
,具有与表
我的触发器就像:
create trigger add_new_record
after
insert on members_new
for each row
INSERT INTO `test`.`members_old`
(
`nMmbID`,
`nMmbName`,
`nMmbAdd`
)
(
SELECT
`members_new`.`nMmbID`,
`members_new`.`nMmbName`,
`members_new`.`nMmbAdd`
FROM `test`.`members_new`
where nMmbID = (select max(nMmbID) from `test`.`members_new` // written to read the last record from the members_new and stop duplication on the members_old , also this will reduce the chances of any error . )
)
此触发器现在正在运行,但我的困惑是如果在一个时刻发生多次插入会发生什么。
会降低性能吗?
在任何情况下我都会遇到死锁情况,因为members_old
有FK?
如果有任何更好的解决方案,请关注那个
答案 0 :(得分:1)
来自manual:
您可以使用别名OLD和NEW来引用主题表(与触发器关联的表)中的列。 OLD.col_name在更新或删除之前引用现有行的列。 NEW.col_name引用要插入的新行的列或更新后的现有行。
create trigger add_new_record
after
insert on members_new
for each row
INSERT INTO `test`.`members_old`
SET
`nMmbID` = NEW.nMmbID,
`nMmbName` = NEW.nMmbName,
`nMmbAdd` = NEW.nMmbAdd;
你会遇到死锁或其他问题。它也应该快得多,因为你不必在之前读取最大值(这也是不安全的,可能会导致数据泄露)。如果您对此感兴趣,请阅读隔离级别和交易......