2012-06-06 2 views
2

У меня есть две таблицы, называемые учетной записью и транзакцией. Мне нужно вставлять данные в транзакцию автоматически, когда учетная запись вводит данные. Я создал этот триггер в MySQL. Он дает ошибку 1064 (Синтаксическая ошибка). В чем проблема?Неправильный синтаксис в триггере

CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW 
BEGIN 
    INSERT INTO transaction VALUES (2,account.openDate,CURTIME(), 
    account.deposit,account.accNo, 
    "Teller","Cash","Deposit"); 
END 
+0

Я думаю, что вы меняете разделитель, не так ли? – jcho360

+0

Используете ли вы MySQL или SQL Server? Кажется, что ваши теги и синтаксис конфликтуют. [tag: sql-server] предназначен для Microsoft SQL Server, а не для MySQL. –

ответ

1

MySQL путается с запятой внутри BEGIN, END блока, так что вы должны использовать DELIMITER временно заставить MySQL использовать другой разделитель.
Документация: http://dev.mysql.com/doc/refman/5.5/en/create-trigger.html

DELIMITER // 
CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW 
BEGIN 
    INSERT INTO transaction VALUES (2,account.openDate,CURTIME(),account.deposit,account.accNo,"Teller","Cash","Deposit"); 
END// 
DELIMITER ; 

Вы, вероятно, нужно заменить:

 INSERT INTO transaction VALUES (2,account.openDate,CURTIME(),account.deposit,account.accNo,"Teller","Cash","Deposit"); 

с:

 INSERT INTO transaction VALUES (2,NEW.openDate,CURTIME(),NEW.deposit,NEW.accNo,"Teller","Cash","Deposit"); 
0
CREATE 
TRIGGER `event_name` AFTER INSERT 
ON `database`.`table` 
FOR EACH ROW BEGIN 
    -- trigger body 
    -- this code is applied to every 
    -- inserted/updated/deleted row 
END; 

Похоже вы пропустили имя таблицы после 'счета' , (Редактирование: или имя базы данных, прежде чем счет, я не уверен относительно того, что счета относится к)

+1

Имя базы данных является необязательным при использовании CREATE TRIGGER. – Jocelyn

1

Вот вам оригинальный триггер

CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW 
BEGIN 
    INSERT INTO transaction VALUES (2,account.openDate,CURTIME(), 
    account.deposit,account.accNo, 
    "Teller","Cash","Deposit"); 
END 

Заменить account.NEW. с (опционально: заменить " с ')

DELIMITER $$ 
CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW 
BEGIN 
    INSERT INTO transaction VALUES (2,NEW.openDate,CURTIME(), 
    NEW.deposit,NEW.accNo, 
    'Teller','Cash','Deposit'); 
END $$ 
DELIMITER ; 
Смежные вопросы