Ошибка при создании триггера - PullRequest
0 голосов
/ 06 апреля 2011

Это простой триггер, который я пытаюсь создать:

CREATE TRIGGER add_item_id BEFORE INSERT ON products 
FOR EACH ROW
BEGIN
DECLARE max_id INTEGER;
SELECT MAX(item_id) INTO @max_id FROM products;
SET NEW.item_id = @max_id + 1;
END;

Я пробовал его как в окне phpMyAdmin SQL, так и в приглашении mysql, и получаю ту же ошибку, как показано ниже:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4 

Ответы [ 2 ]

1 голос
/ 06 апреля 2011
delimiter //
CREATE TRIGGER add_item_id BEFORE INSERT ON products 
FOR EACH ROW
BEGIN
DECLARE max_id int;
SELECT MAX(item_id) INTO max_id FROM products;
SET NEW.item_id = max_id + 1;
END//
delimiter ;

Некоторые примечания:

  • Если вы объявляете (локальная переменная) max_id, используйте его.@max_id - это глобальная переменная.Любую переменную @variable можно использовать без ее объявления, но она остается с сеансом до тех пор, пока сеанс живет.
  • Ваш код в порядке, вы просто пропускаете изменения разделителя.Без delimiter // MySQL видит оператор CREATE TRIGGER, заканчивающийся на ..FROM PRODUCTS;, что делает его недействительным
0 голосов
/ 06 апреля 2011

Вы также можете сделать:

CREATE TRIGGER add_item_id
  BEFORE INSERT
  ON products 
FOR EACH ROW
BEGIN
  SET NEW.item_id = 1 + ( SELECT MAX(item_id)
                          FROM products
                        ) ;
END;

Примечание: вы можете объявить поля auto_incremented почти во всех RDBMS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...