Ошибка в MySQL Триггер - PullRequest
       2

Ошибка в MySQL Триггер

0 голосов
/ 25 января 2011

Я пытаюсь создать триггер.Прежде всего я создал таблицу employee и таблицу employee_audit:

CREATE TABLE employees (
  employeeNumber int(11) NOT NULL,
  lastName varchar(50) NOT NULL,
  firstName varchar(50) NOT NULL,
  extension varchar(10) NOT NULL,
  email varchar(100) NOT NULL,
  officeCode varchar(10) NOT NULL,
  reportsTo int(11) default NULL,
  jobTitle varchar(50) NOT NULL,
  PRIMARY KEY  (employeeNumber)
)

 CREATE TABLE employees_audit ( 
 id int(11) NOT NULL AUTO_INCREMENT, 
 employeeNumber int(11) NOT NULL, 
 lastname varchar(50) NOT NULL, 
 changedon datetime DEFAULT NULL, 
 action varchar(50) DEFAULT NULL, 
 PRIMARY KEY (id) 
 ) 

Затем я создал триггер:

DELIMITER $$
 CREATE TRIGGER before_employee_update 
 BEFORE UPDATE ON employees
 FOR EACH ROW BEGIN
 INSERT INTO employees_audit
 SET action = 'update',
 employeeNumber = OLD.employeeNumber,
 lastname = OLD.lastname,
 changedon = NOW(); END$$
 DELIMITER ;

И первая таблица, и Вторая создается, но когда я выполняю триггерЯ получаю сообщение об ошибке

#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 'DELIMITER $$
CREATE TRIGGER before_employee_update
BEFORE UPDATE ON employe' at line 1 

Есть ли в моем коде ошибка или мне нужна другая версия MySQL?

Ответы [ 2 ]

0 голосов
/ 25 января 2011

ну, я понял, что ты делаешь неправильно.См. Выполнение ниже:

mysql>  CREATE TABLE employees_audit (
->  id int(11) NOT NULL AUTO_INCREMENT,
->  employeeNumber int(11) NOT NULL,
->  lastname varchar(50) NOT NULL,
->  changedon datetime DEFAULT NULL,
->  action varchar(50) DEFAULT NULL,
->  PRIMARY KEY (id)
->  )
->
-> DELIMITER $$
->  CREATE TRIGGER before_employee_update
->  BEFORE UPDATE ON employees
->  FOR EACH ROW BEGIN
->  INSERT INTO employees_audit
->  SET action = 'update',
->  employeeNumber = OLD.employeeNumber,
->  lastname = OLD.lastname,
->  changedon = NOW(); END$$

ОШИБКА 1064 (42000): в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом с DELIM ITER $$

RANG A BELL?СМОТРИТЕ ПОХОЖИЕ?

Дружище, ты (скорее всего) забыл поставить ; в конце директивы create table .Приведенный ниже код работает:

    mysql>
    mysql>  CREATE TABLE employees_audit (
        ->  id int(11) NOT NULL AUTO_INCREMENT,
        ->  employeeNumber int(11) NOT NULL,
        ->  lastname varchar(50) NOT NULL,
        ->  changedon datetime DEFAULT NULL,
        ->  action varchar(50) DEFAULT NULL,
        ->  PRIMARY KEY (id)
        ->  );
    Query OK, 0 rows affected (0.09 sec)

    mysql>
    mysql> DELIMITER $$
    mysql>  CREATE TRIGGER before_employee_update
        ->  BEFORE UPDATE ON employees
        ->  FOR EACH ROW BEGIN
        ->  INSERT INTO employees_audit
        ->  SET action = 'update',
        ->  employeeNumber = OLD.employeeNumber,
        ->  lastname = OLD.lastname,
        ->  changedon = NOW(); END$$
    Query OK, 0 rows affected (0.01 sec)

    mysql>  DELIMITER ;

СТАРЫЙ ОТВЕТ

попробуйте это

DELIMITER $$
 CREATE TRIGGER before_employee_update BEFORE UPDATE ON employees
 FOR EACH ROW 
 BEGIN
   INSERT INTO employees_audit
   SET action = 'update',
   employeeNumber = OLD.employeeNumber,
   lastname = OLD.lastname,
   changedon = NOW(); 
 END;$$
 DELIMITER ;

отсутствует ; послеEND, я думаю,

Редактировать : исправлено:

Редактировать1 : повторный ответ.

0 голосов
/ 25 января 2011

Вы запускаете это из phpMyAdmin? Если это так, разделитель должен быть установлен в поле ниже текстовой области SQL, а не в самой текстовой области.

И нет. В отличие от ответа, который был удален, после DELIMITER $$ не требуется ;, потому что это установит разделитель на $$;

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