2015-01-18 2 views
0

Я создал таблицу test1, какудалить запись, прежде чем вставить новую запись в таблицу, используя триггер в MySQL

CREATE TABLE test1 (ID INT, имя VARCHAR (20)) ENGINE = InnoDB;

Теперь я хочу, чтобы delete запись из этой таблицы перед inserting новой записью, имеющей тот же идентификатор (то есть запись уже существующего с тем же идентификатором, а затем вставить новую запись). Я попробовал код ниже.

create trigger before_insert_test1 before insert 
on test1 
for each row 
begin 
delete from test1 where id=NEW.id; 
end; 

но он показывает ошибку ERROR 1442 (HY000): Невозможно обновить таблицу «test1» в хранимой функции/триггере, так как он уже используется заявлением, которое вызывается этот хранимая функция/триггер. Может кто-нибудь помочь. заранее спасибо

+0

Ваш вопрос похож на этот один: http://stackoverflow.com/ Вопросы/15300673/mysql-error-cant-update-table-in-stored-function-trigger-because-it-is-is – valicu2000

ответ

0
create trigger before_insert_test1 before insert on test1 
DELETE FROM test1 WHERE id=NEW.id; 
end; 

Вам не понадобится цикл, удалять заявление удалит все записи с заданным идентификатором.

0

Я не думаю, что вы можете обновить/удалить из той же таблицы, в которую вы вставляете. Таблица блокируется оператором insert, даже если вы указали после вставки. Вставка транзакции еще не завершена.

Мое предложение было бы сделать тест и удалить запись, прежде чем делать вставку или использовать оператор MySQL ON DUPLICATE KEY UPDATE, если он применяется

+0

Хорошо, но доступная документация подсказывает, что вы не можете. Удачи, – Spock

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