2013-02-13 3 views
0

Я написал триггер, который переносит запись из таблицы 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

Я бы предположил, что это для 'mysql', но вы действительно должны добавить определенный тег при запросе' sql' вопросов - разные двигатели базы данных имеют разные средства, производительность и т. д. –

ответ

1

От manual:

Вы можете ссылаться на столбцы в теме таблицы (таблицы, связанной с триггером) используя псевдонимы OLD и NEW. OLD.col_name ссылается на столбец существующей строки перед ее обновлением или удалением. Имя NEW.col_ ссылается на столбец новой строки, которую нужно вставить, или на существующую строку после ее обновления.

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; 

И у вас не будет никаких проблем с тупиками или любой другой. Кроме того, это должно быть намного быстрее, потому что вам не нужно читать максимальное значение до (что также небезопасно и может привести к взлому данных). Читайте об уровнях изоляции и транзакциях, если вас интересует, почему ...

Смежные вопросы