2012-06-06 4 views
2

계정 및 트랜잭션이라는 두 개의 테이블이 있습니다. 계정에 데이터를 삽입 할 때 자동으로 트랜잭션에 데이터를 삽입해야합니다. MySQL에서이 트리거를 만들었습니다. 그것은 오류 1064 (구문 오류)를 제공합니다. 문제가 무엇입니까? 일시적으로 다른 구분 기호를 사용하여 MySQL을 강제로 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 
+0

구분 기호를 변경하셨습니까? – jcho360

+0

MySQL 또는 SQL Server를 사용하고 있습니까? 태그와 구문이 서로 충돌하는 것 같습니다. [tag : sql-server]는 MySQL이 아닌 Microsoft SQL Server 용입니다. –

답변

1

의 MySQL은 BEGIN END 블록 안에 세미콜론과 혼동됩니다.
문서 :

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

로 : 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,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 ; 
관련 문제