2014-08-31 1 views
0

이 샘플 데이터베이스가 있으며 트리거를 통해 새 직원을 직원 테이블에 추가 한 후 환영 텍스트를 2 열에 추가하려고합니다.추가시 직원 프로필에 환영 메시지 추가를위한 트리거

하지만 구문 오류가 발생합니다. 당신은 당신의 문법에 오류가 몇 가지있다

DELIMITER$$ 
BEGIN 
after insert into employeenumber for each row, 
set action='update', 
set sms='welcome', 
set emails='welcome'; 
END 
END$$ 
DELIMITER; 
+0

오류 란 무엇입니까? 트리거를 사용하는 이유, 일반 데이터와 함께 삽입하지 않거나 해당 열을 기본값으로 설정하는 이유는 무엇입니까? – drneel

+0

MYSQL는 다음과 같이 말했습니다 : # 1064- SQL 구문에 오류가 있습니다. 각 행에 대해 employeenumber에 삽입 한 후 'BEGIN'근처에서 사용할 올바른 구문에 대한 MYSQL 서버 버전에 해당하는 설명서를 확인하십시오. 행 2에서 set action = 'update'를 설정하십시오. – user3806624

+1

다른 두 가지 질문은 어떻게됩니까? 삽입 후 모든 행에 동일한 데이터가있을 경우 왜 트리거가 필요합니까? 열의 기본값을 사용하거나 행을 삽입하여 데이터를 삽입하는 것이 좋습니다. – drneel

답변

0

:

여기 내 코드의 시도이다. 다음을 시도하십시오.

CREATE TRIGGER `afterEmployeeNumberInsert` before INSERT ON employeenumber 
FOR EACH ROW BEGIN 
    SET NEW.action = 'update', 
     NEW.sms = 'welcome', 
     NEW.emails = 'welcome'; 
END 

여기는 SQL Fiddle입니다.

이제, 삽입 된 모든 행에 대해 동일한 데이터를 삽입하는 트리거가 필요한 이유가 없습니다. 데이터베이스가 작업을 수행 할 수있을 때 추가 코드를 추가하고 있습니다. 여기

만 NEW.col_name 사용할 수는 삽입 트리거는 MySQL documentation

에 대한 링크이며; 이전 행이 없습니다.

...

OLD로 명명 된 열은 읽기 전용입니다. ( SELECT 권한이있는 경우 참조 할 수는 있지만 수정할 수는 없습니다. SELECT 권한이있는 경우 NEW라는 이름의 열을 참조 할 수 있습니다. BEFORE 트리거에서 SET NEW.col_name = value 을 사용하여 해당 값을 변경할 수 있습니다 (UPDATE 권한이있는 경우). 즉 트리거를 사용하여 새 행에 삽입 할 값을 수정하거나 행을 업데이트하는 데 사용할 수 있습니다. (이러한 SET 문은 행 변경이 이미 발생했기 때문에 AFTER 트리거 에 영향을 미치지 않습니다.)

+0

Dr.neel에게 많은 관심을 가져 주셔서 감사합니다. 그러나 나는 트리거를 통해 테이블 ​​직원의 동일한 열을 수정하고 다음에 나오는 SMS 열에 추가하고 트리거를 통해 '환영'메시지를 전자 메일로 보내려고합니다. – user3806624

+0

직원 테이블에 새 행을 삽입 한 후 – user3806624

+0

이후 트리거에 삽입 된 행을 업데이트 할 수 없습니다. "After 트리거에서 NEW 행을 업데이트 할 수 없습니다". 전에 사용하셔야합니다. 바이올린을 보면 결과는 같습니다. – drneel