Я использую Mysql в phpMyAdmin, где мне нужно удалить запись из таблицы A, если я вставляю строку с тем же первичным ключом. Я думал сделать это в триггере таблицы A ПЕРЕД ВСТАВКОЙ. Например, если таблица A содержит
1 Hai Hello
здесь 1 - первичный ключ
И теперь, если я вставлю строку 1 Bye Hello
, то триггер BEFORE INSERT удалит старую запись, а затем будет вставлена новая строка (2-я). Но Mysql имеет ограничение на невозможность обновить таблицу внутри триггера, определенного для этой же таблицы.
Это дает ошибку
#1442 - Невозможно обновить таблицу tableA в хранимой функции/триггере, поскольку она уже используется оператором, который вызвал эту хранимую функцию/триггер.
Итак, я изменил свой путь, я вызвал процедуру из триггера ПЕРЕД ВСТАВКОЙ таблицы A, и в этой процедуре я выполняю задачу, которую я думал сделать в триггере. Но, к сожалению, я получаю ту же ошибку. В триггере BEFORE INSERT я просто вызвал процедуру как
CALL proce1(new.Reg_No);
В процедуре я сделал это
DECLARE toup integer;
select count(*) into toup from tableA where Reg_No=reg;/*Here Reg_No is primary key */
if toup > 0 then
delete from tableA where Reg_No=reg;
end if;
Нужна какая-то другая идея, чтобы достичь этого. Помоги мне.....
INSERT...
. Есть ли способ изменить этот автоматический запрос на REPLACE или любой другой, который вы сказали выше? 29.10.2014LOAD DATA INFILE 'D:/c.csv' REPLACE INTO TABLE tableA FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
29.10.2014