Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL 트리거를 만들고 사용하려면 어떻게 해야 합니까?


새 트리거를 생성하려면 CREATE TRIGGER 문을 사용해야 합니다. 구문은 다음과 같습니다 -

CREATE TRIGGER trigger_name trigger_time trigger_eventON table_nameFOR EACH ROWBEGIN...END;

여기,

  • Trigger_name CREATE TRIGGER 문 뒤에 넣어야 하는 트리거의 이름입니다. trigger_name의 명명 규칙은 [trigger time]_[table name]_[trigger event]와 같을 수 있습니다. 예를 들어 before_student_update 또는 after_student_insert는 트리거 이름일 수 있습니다.
  • Trigger_time 트리거 활성화 시간이며 BEFORE 또는 AFTER일 수 있습니다. 트리거를 정의하는 동안 활성화 시간을 지정해야 합니다. 테이블에 적용된 변경 사항 이전에 작업을 처리하려면 BEFORE를 사용하고 테이블에 적용된 변경 사항에 대한 작업 게시를 처리하려면 AFTER를 사용해야 합니다.
  • Trigger_event INSERT, UPDATE 또는 DELETE가 될 수 있습니다. 이 이벤트로 인해 트리거가 호출됩니다. 트리거는 하나의 이벤트에 의해서만 호출될 수 있습니다. 여러 이벤트에 의해 호출되는 트리거를 정의하려면 각 이벤트에 대해 하나씩 여러 트리거를 정의해야 합니다.
  • 테이블 이름 테이블의 이름입니다. 실제로 트리거는 항상 특정 테이블과 연결됩니다. 테이블이 없으면 트리거가 존재하지 않으므로 'ON' 키워드 뒤에 테이블 이름을 지정해야 합니다.
  • BEGIN…END 트리거 논리를 정의할 블록입니다.

예시

다음과 같이 생성된 Student_age 테이블에 트리거를 적용하려고 한다고 가정해 보겠습니다. -

mysql> 테이블 생성 Student_age(age INT, Name Varchar(35));Query OK, 영향을 받는 행 0개(0.80초)

누군가 age <0을 삽입하려고 하면 다음 트리거가 자동으로 age =0을 삽입합니다.

mysql> DELIMITER //mysql> 트리거 생성 before_inser_studentage BEFORE INSERT ON student_age FOR EACH ROWBEGINIF NEW.age <0 THEN SET NEW.age =0;END IF;END //쿼리 OK, 0행 영향(0.30초) 

이제 이 트리거를 호출하기 위해 다음 명령문을 사용할 수 있습니다.

mysql> INSERT INTO Student_age(age, Name) values(30, 'Rahul');Query OK, 1행 영향(0.14초)mysql> INSERT INTO Student_age(age, Name) values(-10, 'Harshit' );쿼리 OK, 영향을 받는 행 1개(0.11초)mysql> Select * from Student_age;+------+---------+| 나이 | 이름 |+------+---------+| 30 | 라훌 || 0 | 가혹한 |+------+---------+2행 세트(0.00초)

위의 결과 집합은 테이블에 음수 값을 삽입하면 트리거에 의해 0이 삽입됨을 보여줍니다.

위는 trigger_event가 INSERT이고 trigger_time이 BEFORE인 트리거의 예입니다.