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

동일한 트리거 이벤트 및 작업 시간에 대해 여러 MySQL 트리거를 생성하려면 어떻게 해야 합니까?


MySQL 5.7.2+를 사용하면 테이블에서 동일한 이벤트 및 작업 시간에 대해 여러 트리거를 생성할 수 있습니다. 이벤트가 발생하면 두 트리거가 순차적으로 활성화됩니다. 예를 통해 이해할 수 있습니다 -

예시

이 예에서는 BEFORE UPDATE라는 동일한 이벤트에 대해 여러 트리거를 생성합니다. 트리거 이름은 'Studentdetail_before_update' 및 'Studentdetail_before_update2'입니다. 이벤트 발생 시 순차적으로 활성화됩니다. 우리는 다음 데이터가 있는 'Student_detail' 테이블에서 이러한 트리거를 생성하고 있습니다 -

mysql> 선택 * from Student_detail;+-------------+------------+------------+ | 학생 아이디 | 학생 이름 | 주소 |+-----------+-------------+------------+| 100 | 가우라프 | 델리 || 101 | 라만 | 심라 || 103 | 라훌 | 자이푸르 || 104 | 램 | 찬디가르 || 105 | 모한 | 찬디가르 |+-----------+------------+------------+5행 세트(0.06초) mysql> 구분자 //

이제 다음 쿼리를 사용하여 이전과 동일한 쿼리로 생성되는 첫 번째 트리거를 생성합니다.

mysql> 트리거 생성 studentdetail_before_update -> BEFORE UPDATE -> ON Student_detail -> FOR EACH ROW -> BEGIN -> DECLARE AUSER Varchar(40); -> SELECT USER()를 AUSER로; ->INSERT INTO Student_detail_updated(studentid, Updated_date,Updated_by) values(OLD.studentid,NOW(),AUSER); -> 끝; //쿼리 OK, 0행 영향(0.17초)mysql> Update student_detail SET 주소 ='Ludhiana' Where studentName ='Ram';Query OK, 1행 영향(0.15초)행 일치:1 변경됨:1 경고:0 

위에서 생성한 트리거를 호출한 후 다음과 같은 결과를 얻었습니다.

mysql> 선택 * from student_detail_updated;+------------+------------------+----- -----------+| 학생 | 업데이트 날짜 | 업데이트됨 |+-----------+---------------------+------------- ---+| 104 | 2017-11-22 16:17:16 | root@localhost |+-----------+------------------------+------------- -----+1 행 세트(0.00초)

이제 동일한 이벤트 및 동작 시간의 두 번째 트리거는 다음과 같이 생성할 수 있습니다. -

mysql> 트리거 생성 studentdetail_before_update2 -> BEFORE UPDATE -> ON Student_detail -> FOR EACH ROWS studentdetail_before_update -> BEGIN -> DECLARE AUSER Varchar(40); -> SELECT USER()를 AUSER로; -> INSERT INTO Student_detail_updated(studentid, Updated_date,Updated_by) values(OLD.studentid,NOW(),AUSER); -> 끝; //쿼리 OK, 영향을 받는 행 0개(0.15초)

위의 트리거는 'FOLLOWS'라는 키워드를 사용하고 있기 때문에 첫 번째 트리거 이후에 ​​활성화됩니다.

mysql> Update Student_detail SET 주소 ='Patiala' WHERE studentname ='Mohan';Query OK, 1개 행이 영향을 받았습니다(0.08초)행 일치:1 변경됨:1 경고:0

이제 값을 업데이트하면 다음 결과 집합에 동일한 이벤트 및 작업 시간에 대한 두 개의 행이 표시됩니다. 두 번째 행은 studentdetail_before_update 트리거 이후의 값이고 세 번째 행은 studentdetail_before_update2 트리거 이후의 값입니다.

mysql> 선택 * from student_detail_updated;+------------+------------------+----- -----------+| 학생 | 업데이트 날짜 | 업데이트됨 |+-----------+---------------------+------------- ---+| 104 | 2017-11-22 16:17:16 | root@localhost || 105 | 2017-11-22 16:19:28 | root@localhost || 105 | 2017-11-22 16:19:28 | root@localhost |+-----------+------------------------+------------- -----+3 행 세트(0.00초)