>  기사  >  데이터 베이스  >  Mysql의 트리거 구문은 무엇입니까?

Mysql의 트리거 구문은 무엇입니까?

WBOY
WBOY앞으로
2023-05-28 23:17:351867검색

1. 정의:

MySQL에 내장된 프로그램에는 트리거와 저장 프로시저가 포함되어 있으며 둘 다 유사합니다. 트리거는 이벤트에 의해 트리거되는 작업입니다. 데이터베이스가 이러한 이벤트를 실행하면 트리거가 활성화되어 해당 작업을 수행합니다. MySQL에서 트리거 조건에는 UPDATE, INSERT 및 DELETE 작업이 포함됩니다.

  • MySQL에서는 현재 UPDATE, INSERT 및 DELETE의 세 가지 작업만 트리거를 트리거합니다. 다른 작업은 트리거를 지원하지 않습니다. 이는 Oracle의 트리거와 매우 다르므로 차이점에 주의하세요.

  • 각 트리거 테이블은 이벤트당 하나의 트리거만 허용합니다. 따라서 테이블 값당 최대 6개의 트리거가 허용됩니다. 테이블이 INSERT 및 DELETE라는 두 개의 이벤트를 트리거해야 하는 경우 각각 두 개의 트리거를 생성해야 합니다.

  • 테이블만 트리거를 지원하고 뷰는 지원하며 임시 테이블은 지원하지 않습니다.

2. 구문:

CREATE TRIGGER TRIGGER_NAME
BEFORE/AFTER 
UPDATE/INSERT/DELETE ON TABLE_NAME 
FOR EACH ROW
#触发器主体
[BEGIN]
SQL操作
[END];
  • 트리거 생성: CREATE 문을 사용하여 저장 프로시저를 생성하는 것과 동일하지만 여기에는 OR REPLACE가 없다는 점에 유의하세요.

  • TRIGGER_NAME: 트리거 이름. MySQL에서는 각 테이블의 트리거가 고유한지 확인해야 하며, 각 데이터베이스의 트리거는 고유하지 않을 수 있습니다. 이는 데이터베이스의 두 테이블이 동일한 트리거를 가질 수 있음을 의미합니다. 이 동작은 다른 데이터베이스에서는 허용되지 않습니다. 형식 일관성을 유지하려면 TRIGGER_NAME은 최대한 고유해야 합니다.

  • BEFORE/AFTER: 방아쇠가 발사되는 순간. 이벤트가 발생하기 전에 트리거를 실행하려면 "BEFORE"를 사용하면 됩니다. 이벤트가 발생한 후에 트리거를 실행하려면 "AFTER"를 사용하면 됩니다.

  • 작업: UPDATE/INSERT/DELETE는 해당 이벤트와 조건을 트리거합니다. MySQL은 이 세 가지 DDL 작업만 트리거를 지원하도록 허용하며 다른 작업은 지원되지 않습니다.

  • 각 행에 대해: 트리거 이벤트의 영향을 받는 각 행은 트리거 작업을 활성화해야 합니다. MySQL에서 행 트리거링은 FOE EACH ROW를 생략할 수 없으며 명령문 트리거링이 지원되지 않음을 의미합니다.

  • 트리거 본문: 단일 SQL 문이거나 BEGIN...END로 구성된 복잡한 구조 블록일 수 있습니다.

# 创建一个触发器T1,在对表customer做插入操作时,就会触发T1,之后会在日志表note中插入一条数据
CREATE TRIGGER T1
AFTER 
INSERT ON customer
FOR EACH ROW # 触发器主体
INSERT INTO note(日期,目标,操作) VALUES(NOW(),'customer','insert');

3. 트리거 삭제

테이블 및 저장 프로시저 삭제와 유사하게 DROP 문을 사용하여 트리거를 삭제합니다.

#删除触发器T1
DROP TRIGGER IF EXISTS T1;

트리거는 업데이트하거나 수정할 수 없습니다. 트리거 내용을 수정하려면 먼저 트리거를 삭제한 다음 새 트리거를 생성하면 됩니다.

4. 쿼리 트리거

#在已知数据库内,查询触发器
SHOW TRIGGERS;
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名'
#查询所有的触发器
SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')

5. OLD 및 NEW 트리거 유형 사용

  트리거는 DDL 작업 전후에 트리거되며 때로는 대상 테이블의 변경 사항을 알아야 합니다. 대상 테이블 이전 및 이후의 값은 OLD 및 NEW의 사용법을 사용합니다.

이름에서 알 수 있듯이 OLD는 변경 전의 값으로 UPDATE 전의 값이거나 DELETE될 예정이거나 DELETE된 값입니다.

 그리고 NEW는 UPDATE 이후의 새로운 값으로, INSERT될 예정이거나 이미 INSERT된 값입니다.

Mysql의 트리거 구문은 무엇입니까?

구체적인 예:

#创建customer表
CREATE TABLE `customer` 
(`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,
`CUST_NAME` varchar(10) NOT NULL,
`CUST_TEL` varchar(10) DEFAULT NULL,
PRIMARY KEY (`CUST_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#向表中插入数据

#创建一个update触发器
CREATE TRIGGER T2
AFTER 
UPDATE ON customer
FOR EACH ROW 
#old和new的使用方法:old.columnname/new.columnname(列名)
#将更新前后的值,赋值给两个变量
SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;

#触发触发器T2
UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';

#查询OLD和NEW
SELECT @OLD_ID,@NEW_ID;

위 내용은 Mysql의 트리거 구문은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제