2013-09-10 2 views
10

MySQL을 처음 사용합니다. 두 테이블 total_loaner 및 available_loaner 있습니다. total_loaner에 추가 된 모든 새 행에 대한 트리거를 만들려고합니다. 새 행을 available_loaner에 추가하려고합니다. 여기삽입 후 MySQL 트리거 실행

내 표는 다음과 같다 방법 :

CREATE TABLE `total_loaner` (
    `Kind` varchar(10) NOT NULL, 
    `Type` varchar(10) NOT NULL, 
    `Sno` varchar(10) NOT NULL, 
    PRIMARY KEY (`Sno`) 
) 

CREATE TABLE `available_loaner` (
    `Kind` varchar(10) NOT NULL, 
    `Type` varchar(10) NOT NULL, 
    `Sno` varchar(10) NOT NULL, 
    `Status` char(10) NOT NULL DEFAULT '', 
    PRIMARY KEY (`Sno`) 
) 

내 트리거가 작동하지 않습니다.

DELIMITER $$ 

CREATE TRIGGER new_loaner_added 
AFTER INSERT ON `total_loaner` for each row 
begin 
INSERT INTO available_loaner (Kind, Type, Sno, Status) 
Values (new.Kind, new.Type, new.Sno, 'Available'); 
END$$ 

DELIMITER ; 

지금, 그것은 CREATE TRIGGER 문장의 끝이 INSERT 문장의 끝에 세미콜론을 혼란 :

CREATE TRIGGER new_loaner_added 
AFTER INSERT ON 'total_loaner' for each row 
begin 
INSERT INTO available_loaner (Kind, Type, Sno, Status) 
Values (new.Kind, new.Type, new.Sno, 'Available'); 
END; 

답변

4

당신은 아마 당신의 구분 기호를 설정해야합니다.

0
AFTER INSERT ON `total_loaner` 

백틱을 사용하십시오. 귀하의 경우에는

11

CREATE TRIGGER new_loaner_added 
AFTER INSERT ON total_loaner 
FOR EACH ROW 
    INSERT INTO available_loaner (Kind, Type, Sno, Status) 
    VALUES (NEW.Kind, NEW.Type, NEW.Sno, 'Available'); 

주처럼 트리거를 다시 작성할 수 있습니다 : 테이블 이름 total_loaner에서 제거

  • 따옴표, 따옴표 효과적으로 대신의 그것이 문자열 리터럴 만들기 때문에 적절한 식별자. 원한다면 역 틱을 사용할 수 있지만 예약어가 아니며 특수 문자가 포함되어 있지 않으므로 불필요합니다.
  • 는 한 문장 트리거 이후 지금 당신은 DELIMITER 명령 BEGIN...END 블록을 사용할 필요가 없습니다

여기 SQLFiddle 데모

이 하나가 나를 위해 일한
2

, 더 단순화 된 버전입니다 ..

CREATE TRIGGER new_loaner_added 
    AFTER INSERT ON `DB1`.`table_name` 
    FOR EACH ROW 
     INSERT INTO `DB2`.`table_name` (messageID, conversationID, fromJID) 
     VALUES (NEW.messageID,NEW.conversationID, NEW.fromJID); 
+0

와 다른 테이블의 열 이름이 다음 다른 경우 우리는 SHO 무엇 uld는? –

-1
CREATE TRIGGER new_loaner_added 
AFTER INSERT ON total_loaner 

FOR EACH ROW 
    INSERT INTO available_loaner (Kind, Type, Sno, Status) 
    VALUES (NEW.Kind, NEW.Type, NEW.Sno, 'Available');