2013-04-22 3 views
-1

Здесь я хочу скопировать содержимое таблицы X в таблицу Y и в тех же строках, которые я хотел удалить из таблицы X. Я попробовал это следующим образом, но он не работает.Mysql: Запуск после вставки содержимого копии в другую таблицу и удаление строки из инициированной таблицы.

Drop trigger if exists myTrigger; 

delimiter | 
create trigger myTrigger 
after insert on X 
for each row 
BEGIN 
    IF STRCMP(NEW.SysLogTag,"kernel:") = 0 THEN 
     INSERT INTO Y(logtime,moduleid,severity,messageid,message) values(NULL,1,1,100,NEW.Message); 
    ELSEIF NEW.SysLogTag like 'ntpd[%]:' THEN 
     INSERT INTO Y(logtime,moduleid,severity,messageid,message) values(NULL,6,1,100,NEW.Message); 
    ELSE 
     INSERT INTO Y(logtime,moduleid,severity,messageid,message) values(NULL,4,1,100,NEW.Message); 
    END IF; 
    delete from X where ID=NEW.ID; //Not working. 
END;| 
delimiter ; 

ответ

0

От http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html#c8808:

Мое решение было создать уникальный/первичный ключ на столе, я хочу, чтобы вставить (в данном случае на s_id), а затем, если моя проверка исправности не может изменить s_id 0. Этот метод будет создавать только одну запись duff с s_id из 0. Очевидно, что вам нужно INSERT игнорировать!

CREATE TRIGGER sanityCheck 
BEFORE INSERT ON my_table 
FOR EACH ROW 
BEGIN 
IF something THEN 
SET NEW.S_ID = 0 ; 
END IF; 
END;