MySQL에 내장된 프로그램에는 트리거와 저장 프로시저가 포함되어 있으며 둘 다 유사합니다. 트리거는 이벤트에 의해 트리거되는 작업입니다. 데이터베이스가 이러한 이벤트를 실행하면 트리거가 활성화되어 해당 작업을 수행합니다. MySQL에서 트리거 조건에는 UPDATE, INSERT 및 DELETE 작업이 포함됩니다.
MySQL에서는 현재 UPDATE, INSERT 및 DELETE의 세 가지 작업만 트리거를 트리거합니다. 다른 작업은 트리거를 지원하지 않습니다. 이는 Oracle의 트리거와 매우 다르므로 차이점에 주의하세요.
각 트리거 테이블은 이벤트당 하나의 트리거만 허용합니다. 따라서 테이블 값당 최대 6개의 트리거가 허용됩니다. 테이블이 INSERT 및 DELETE라는 두 개의 이벤트를 트리거해야 하는 경우 각각 두 개의 트리거를 생성해야 합니다.
테이블만 트리거를 지원하고 뷰는 지원하며 임시 테이블은 지원하지 않습니다.
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');
테이블 및 저장 프로시저 삭제와 유사하게 DROP 문을 사용하여 트리거를 삭제합니다.
#删除触发器T1 DROP TRIGGER IF EXISTS T1;
트리거는 업데이트하거나 수정할 수 없습니다. 트리거 내용을 수정하려면 먼저 트리거를 삭제한 다음 새 트리거를 생성하면 됩니다.
#在已知数据库内,查询触发器 SHOW TRIGGERS; SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名' #查询所有的触发器 SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')
트리거는 DDL 작업 전후에 트리거되며 때로는 대상 테이블의 변경 사항을 알아야 합니다. 대상 테이블 이전 및 이후의 값은 OLD 및 NEW의 사용법을 사용합니다.
이름에서 알 수 있듯이 OLD는 변경 전의 값으로 UPDATE 전의 값이거나 DELETE될 예정이거나 DELETE된 값입니다.
그리고 NEW는 UPDATE 이후의 새로운 값으로, INSERT될 예정이거나 이미 INSERT된 값입니다.
구체적인 예:
#创建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 중국어 웹사이트의 기타 관련 기사를 참조하세요!