Mysql의 트리거는 테이블 작업과 관련된 데이터베이스 객체로, 트리거가 위치한 테이블에서 지정된 이벤트가 발생하면 해당 객체, 즉 테이블의 작업 이벤트가 호출됩니다. 테이블 실행에서 트리거를 트리거합니다.
때때로 테이블의 일부 데이터를 변경할 때 다른 관련 테이블의 데이터도 변경되기를 원할 경우 트리거를 사용하면 이러한 요구 사항을 충족할 수 있습니다. 트리거를 사용하면 프로그램을 단순화하고 프로그램의 유연성을 높일 수 있습니다.
트리거 생성 구문은 다음과 같습니다.
create trigger name(触发器名称) after/befor(触发时间) insert/update/delete(触发事件,当填写其中一种,其它的操作不会激活触发器) on (监视的表,即在哪张表上建立触发器 ) for each row (行级触发器) begin (sql语句,希望改变的数据,可写多条语句,每条语句必须用 ; 结尾) end;
위의 sql 문은 ;를 쓴 후 실행됩니다. 트리거가 완료되기 전에 오류가 보고됩니다!
이때 DELIMITER 명령이 사용됩니다(구분자는 구분 기호, 구분 기호의 의미). 구문은
입니다. DELIMITER ;; (mysql을 넣을 수 있습니다. 끝 식별자는;; 또는 $와 같은 다른 기호로 설정됩니다. (여러 길이로 설정할 수도 있음)
이 문 뒤에는 세미콜론, ;;,을 만나면 마지막 문장으로 간주됩니다. 참고: 사용한 후에는 다시 수정하는 것을 잊지 마세요!
시스템에 두 개의 테이블이 있다고 가정합니다.
제품 테이블 상품(상품 ID gid, 상품 이름 상품_이름, 상품 수량 상품_번호)
주문 테이블 ord(주문 oid, 상품 ID gid, 주문 수량 상품_많음)
트리거를 생성하려면 제품 테이블의 상품 수량은 주문 테이블의 주문 수량으로 자동 업데이트됩니다. 코드는 다음과 같습니다.
delmiter $ #判断库存是否足够 create trigger t1 before insert on ord for each row begin #声明变量 declare goods_num int; select num into goods_num from goods where gid = new.gid; #判断 if new.much > goods_num then set new.much = goods_num; end if; update goods set num = num - new.much where gid=new.gid end$ delmiter ;
MySQL에서 선언을 사용하여 로컬 변수를 정의합니다. 이 변수는 BEGIN ..에서만 사용할 수 있습니다. .END 복합문은 다음과 같이 정의되어야 합니다. 복합문의 시작 부분에는 위의 예에서 NEW 키워드가 사용됩니다. 이는 MS SQL Server의 INSERTED 및 DELETED와 유사하게 테이블을 나타내기 위해 MySQL에서 NEW 및 OLD가 정의됩니다. 트리거가 있는 위치와 해당 데이터 행입니다.
구체적으로: INSERT 유형 트리거에서 NEW는 삽입될 예정이거나 삽입된(AFTER) 새 데이터를 나타내는 데 사용됩니다.
UPDATE 유형 트리거에서 OLD는 삽입될 예정이거나 삽입된 원본 데이터를 나타내는 데 사용됩니다. 수정됨, NEW는 수정될 예정이거나 수정된 새 데이터를 나타내는 데 사용됩니다.
DELETE 유형 트리거에서 OLD는 삭제될 예정이거나 삭제된 원본 데이터를 나타내는 데 사용됩니다.
위 내용은 MySQL 트리거에 대한 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!