>  기사  >  데이터 베이스  >  MySQL 트리거에 대한 질문

MySQL 트리거에 대한 질문

一个新手
一个新手원래의
2017-10-23 10:30:172109검색

trigger

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.