2011-12-30 4 views
0

У меня есть таблица с несколькими полями. Одно поле «date_assigned», другое - «назначено». «date_assigned» имеет тип данных временной метки и может быть нулевым. «назначенный» имеет тип данных tinyint, а значения - 0 (по умолчанию, «не назначено») или 1 («назначено»).MySQL Trigger On A Column

Я хотел бы создать триггер, который автоматически обновит «присвоенное» значение до 1, когда «date_assigned» обновляется со значением (не является нулевым).

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

DELIMITER $$ 

CREATE 
    TRIGGER `<database>`.`<trigger_name>` AFTER UPDATE 
    ON `<database>`.`<table>` 
    FOR EACH ROW BEGIN 
    IF(NEW.date_assigned IS NOT NULL) THEN 
    UPDATE <table> SET assigned = '1'; 

    END$$ 

DELIMITER ; 

Я просто получить код ошибки: 1064. Я посмотрел UPO кода, и кажется, что это ошибка синтаксиса. Итак, какую синтаксическую ошибку я принимаю, и это даже правильная «грамматика»?

ответ

1

Попробуйте положить BEGIN в новой строке следующим образом.

DELIMITER $$ 

CREATE 
    TRIGGER `<database>`.`<trigger_name>` AFTER UPDATE 
    ON `<database>`.`<table>` 
    FOR EACH ROW 

    BEGIN 
    IF(NEW.date_assigned IS NOT NULL) THEN 
    UPDATE <table> SET assigned = '1'; 

    END;  //Change here also. 
    $$ 

DELIMITER ; 
0

Это из-за разделителя по умолчанию в MySQL, установленного на ;. Таким образом, первая строка должна выглядеть DELIMITER $$;

DELIMITER $$; 

CREATE  TRIGGER `<database>`.`<trigger_name>` 
AFTER UPDATE  ON `<database>`.`<table>` 
FOR EACH ROW BEGIN  
IF(NEW.date_assigned IS NOT NULL) THEN 
UPDATE <table> SET assigned = '1'; 
END$$ 

    DELIMITER ;