MySQL триггер на столбце - PullRequest
0 голосов
/ 30 декабря 2011

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

Я хотел бы создать триггер, который автоматически обновляет «назначенное» значение до 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. Я посмотрел на код, и кажется, что это синтаксическая ошибка. Так какую синтаксическую ошибку я делаю, и это даже правильная «грамматика»?

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Попробуйте ввести 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 голосов
/ 30 декабря 2011

Это связано с тем, что в 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 ;
...