Триггер для вставки

#mysql

Вопрос:

Можно ли вставить элемент управления в данные, которые вставляются в таблицу? Способом, который удовлетворяет конкретному условию при условии, что в противном случае не

 drop function Presente;
delimiter //
create function Presente( Persona_Da_Cercare varchar(16), Data_Legge date) returns int
begin

    declare risultato int;

    select count(*) into risultato
    from PARLAMENTARI_IN_CARICA as pic
    where Persona_Da_Cercare = pic.Persona and data_Legge >= pic.Data_Eletto;

    if risultato = 0
    then
        select count(*) into risultato
        from STORICO_PARLAMENTARI as sp
        where Persona_Da_Cercare = sp.Persona and data_Legge >= sp.Data_Inizio and data_Legge <= sp.Data_Fine;
    end if;
    return risultato;

end//


set @ultima_legge bigint;
set @ultimo_parlamentare varchar(16);
set @data_legge date;


drop trigger if exists Ultimo_Voto;
delimiter $
create trigger Ultimo_Voto before insert on VOTO_PALESE
for each row
begin

    set @ultima_legge = new.Legge;
    set @ultimo_parlamentare = new.parlamentare;
    set @data_legge = (select Data_Approvazione from LEGGI where Cod_Legge = new.Legge);

end $


drop trigger if exists Controllo_Voto_Palese;
delimiter $
create trigger Controllo_Voto_Palese after insert on VOTO_PALESE
for each row
BEGIN

    IF Presente(@ultimo_parlamentare, @data_legge) = 0 THEN
        delete from VOTO_PALESE where Legge = @ultima_legge AND Parlamentare = @ultimo_parlamentare;
    END IF; 

END $


insert into VOTO_PALESE(Legge, Parlamentare, Voto) values(770, 'MSRMRC01C14L378X', 'astenuto');
 

когда я запускаю код, он выдает мне эту ошибку

 Error Code: 1442. Can't update table 'voto_palese' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
 

Я не понимаю, в чем проблема

Комментарии:

1. сообщение об ошибке ясно, что вы не можете обновить удалить или вставить в ту же таблицу, в которой сработал триггер.

2. хорошо, но тогда невозможно проверить данные, которые я хочу вставить?

3. Когда вы вставляете новую строку, он запускает, что вы можете проверять каждый столбец с новым именем.column, а также изменять его. Чего вы не можете сделать, так это удалить в той же таблице, обновить или вставить. Используйте, если NEW.column = 1, или УСТАНОВИТЕ NEW.column = столбец 1