2011-01-25 5 views
0

Я пытаюсь создать триггер. Прежде всего, я создал сотрудников и стола employees_audit:Ошибка в mysql Trigger

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?

+0

Я обновил свой ответ. Похоже, вы проигнорировали что-то тривиальное. – Nishant

ответ

0

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

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

0

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

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$$ 

ERROR 1064 (42000): У вас ошибка в вашем SQL синтаксиса; в руководстве, соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с «DELIM ITER $$

RANG колокольчик? ПОСМОТРЕТЬ?

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

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 ; 

OLD ОТВЕТ

попробовать это

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, я думаю,

Edit: фиксированный foramtting

edit1: повторное ответил.

+0

Нет, там не должно быть ';'. – Mchl

+0

все еще получаю ошибку DELIMITER $$ CREATE TRIGGER before_employee_update перед обновлением ПО сотрудников для каждой строки НАЧАТЬ INSERT INTO employees_audit SET действие = 'обновление', Employeenumber = OLD.employeeNumber, = OLD Lastname.lastname, changedon = NOW(); END; $$ DELIMITER; MySQL: Документация # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «DELIMITER $$ CREATE TRIGGER before_employee_update ПЕРЕД ОБНОВЛЕНИЕМ НА РАБОТНИКАХ » в строке 1 –

+0

@ G-Rajendra обновленный ответ. @Mchl Да. Просто продемонстрировал, поразив мой старый ответ. – Nishant

Смежные вопросы