>  기사  >  데이터 베이스  >  MySQL에서 저장 함수를 생성하고 트리거를 설정하는 방법

MySQL에서 저장 함수를 생성하고 트리거를 설정하는 방법

WBOY
WBOY앞으로
2023-06-02 22:43:381563검색

저장 함수도 저장 프로시저와 유사한 프로시저 객체 중 하나입니다. 이러한 코드 조각에는 애플리케이션과 SQL에서 호출할 수 있는 SQL 및 절차문이 포함되어 있습니다. 그러나 몇 가지 차이점도 있습니다.

1. 저장 기능 자체가 출력 매개변수이기 때문에 저장 기능에는 출력 매개변수가 없습니다.

2. CALL 문은 저장된 함수를 호출하는 데 사용할 수 없습니다.

3. 저장 함수에는 RETURN 문이 포함되어야 하며, 이 특수 SQL 문은 저장 프로시저에 포함될 수 없습니다.

1. 저장 함수 만들기

저장 함수를 만들려면 CREATE FUNCTION 문을 사용하세요. 구문 형식:

CREATE FUNCTION 저장 함수 이름([매개변수[,...]])
RETURNS 유형

함수 본문

참고: 저장 함수는 저장 프로시저와 동일한 이름을 가질 수 없습니다. 저장된 함수 본문에는 RETURN 값 문이 포함되어야 하며 값은 저장된 함수의 반환 값입니다.

예: Book 테이블의 책 수를 결과로 반환하는 저장 함수 만들기

DELIMITER $$
CREATE FUNCTION num_book()
RETURNS INTEGER
BEGIN
RETURN(SELECT COUNT(*)FROM Book);
END$$
DELIMITER ;

RETURN 절에 SELECT 문이 포함된 경우 SELECT 문의 반환 결과는 값의 행과 열 1개만 될 수 있습니다. . 저장 함수에 매개변수가 필요하지 않더라도 이를 호출할 때 ()를 사용해야 합니다(예: num_book()).

Example: Sell 테이블에는 있지만 Book 테이블에는 없는 레코드를 삭제하는 저장 함수 만들기

DELIMITER $$
CREATE FUNCTION del_sell(book_bh CHAR(20))
RETURNS BOOLEAN
BEGIN
DECLARE bh CHAR(20);
SELECT 图书编号 INTO bh FROM Book WHERE 图书编号=book_bh;
IF bh IS NULL THEN
DELETE FROM Sell WHERE 图书编号=book_bh;
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END$$
DELIMITER ;

저장 함수는 책 번호를 입력 매개변수로 제공합니다. 먼저, 주어진 책 번호를 기준으로 Book 테이블을 검색합니다. 이 책 번호가 있는 책이 없으면 false를 반환하고, 있으면 true를 반환합니다. 동시에 이 도서 번호가 있는 도서는 Sell 테이블에서 삭제되어야 합니다. 데이터베이스의 저장 프로시저를 나열하려면 SHOW FUNCTION STATUS 명령을 사용하십시오.

2. 저장 함수 호출

저장 함수가 생성된 후 저장 함수를 호출하는 방법은 시스템에서 제공하는 내장 함수를 사용하는 것과 동일하며 둘 다 SELECT 키워드를 사용합니다.

구문 형식:

SELECT 저장 함수 이름([매개변수 [,...]])

예: 저장 함수 게시_book을 만들고, 저장 함수 작성자_book을 호출하여 책의 저자를 가져온 다음, 여부를 확인합니다. 저자의 성은 "Zhang"입니다. 그렇다면 출판 시간이 반환되고, 그렇지 않으면 "불만족"이 반환됩니다.
DELIMITER $$
CREATE FUNCTION publish_book(b_name CHAR(20))
RETURNS CHAR(20)
BEGIN
DECLARE name CHAR(20);
SELECT author_book(b_name)INTO name;
IF name like'张%' THEN
RETURN(SELECT 出版时间 FROM Book WHERE 书名=b_name);
ELSE
RETURN'不合要求';
END IF;
END$$
DELIMITER ;

저장 함수 게시_book을 호출하여 결과를 확인하세요.

SELECT 게시_book('컴퓨터 네트워크 기술');

저장 함수를 삭제하는 방법은 기본적으로 저장 프로시저를 삭제하는 것과 동일합니다
.

문법 형식:

DROP FUNCTION [IF EXISTS] 저장 함수 이름

참고: IF EXISTS 절은 함수가 존재하지 않는 경우 오류 발생을 방지하는 MySQL의 확장입니다.

예: 저장 함수 삭제 a

DROP FUNCTION IF EXISTS a;

3. 트리거 만들기

CREATE TRIGGER 문을 사용하여 트리거 만들기

구문 형식:

CREATE TRIGGER 트리거 이름 트리거 시간 트리거 이벤트
ON 테이블 이름 FOR EACH ROW 트리거 작업


트리거에는 두 가지 실행 옵션: BEFORE 및 AFTER 는 각각 트리거가 트리거를 활성화하는 명령문 이전 또는 이후에 실행되는지 여부를 나타냅니다. 일반적으로 AFTER 옵션은 트리거를 활성화한 후 명령문을 실행하는 데 사용됩니다. BEFORE 옵션은 새 데이터가 사용 제한 사항을 준수하는지 확인하는 데 사용됩니다.

SELECT 문이 포함된 트리거는 결과를 클라이언트에 반환합니다. 이러한 상황을 방지하려면 트리거 정의에 SELECT 문을 사용하지 않아야 합니다. 마찬가지로 클라이언트에 데이터를 반환하는 저장 프로시저를 호출할 수 없습니다.

예: 단 하나의 열 a가 있는 table1 테이블을 만들고 테이블에 트리거를 만든 다음 각 삽입 작업 중에 사용자 변수 str의 값을 TRIGGER IS WORKING으로 설정합니다.

CREATE TABLE table1(a INTEGER);
CREATE TRIGGER table1_insert AFTER INSERT
ON table1 FOR EACH ROW
SET@str='TRIGGER IS WORKING';

데이터베이스에 어떤 트리거가 있는지 확인하려면 SHOW TRIGGERS 명령을 사용하세요.

MySQL 트리거의 SQL 문은 테이블의 모든 열과 관련될 수 있습니다. 그러나 열 이름을 직접 사용하여 표시할 수는 없습니다. 이는 트리거를 활성화하는 명령문이 새 열 이름을 수정, 삭제 또는 추가했을 수 있고 열의 이전 이름이 존재하기 때문에 시스템을 혼란스럽게 할 수 있습니다. 같은 시간. NEW.column_name 또는 OLD.column_name 구문을 사용하여 식별해야 합니다. NEW.column_name은 새로운 행의 컬럼을 참조하는 데 사용되고, OLD.column_name은 기존 행의 컬럼을 업데이트하거나 삭제하기 전에 참조하는 데 사용됩니다.

INSERT 문의 경우 NEW만 가능하고, DELETE 문의 경우 OLD만 가능합니다. UPDATE 문은 NEW 및 OLD와 동시에 사용할 수 있습니다.

"Book" 테이블의 책 정보가 삭제되면 해당 책과 관련된 "Sell" 테이블의 모든 데이터가 동시에 삭제되도록 트리거를 생성합니다.

DELIMITER $$
CREATE TRIGGER book_del AFTER DELETE
ON Book FOR EACH ROW
BEGIN
DELETE FROM Sell WHERE 图书编号=OLD.图书编号;
END$$
DELIMITER ;

트리거가 테이블 자체의 업데이트 작업을 트리거하려는 경우 BEFORE 트리거만 사용할 수 있으며 AFTER 트리거는 허용되지 않습니다.

4. 트리거에서 저장 프로시저를 호출합니다.

예: Members 테이블에 데이터를 추가할 때 Bookstore 데이터베이스에 member_b 테이블이 있다고 가정합니다. 절차. member_b 테이블의 데이터는 Members 테이블과 동기화됩니다.

1. 저장 프로시저를 정의합니다. Members 테이블과 동일한 구조로 member_b를 생성합니다.

DELIMITER $$
CREATE PROCEDURE data_copy()
BEGIN
REPLACE member_b SELECT * FROM Members;
END$$

2. 트리거 생성: 저장 프로시저 data_copy()

DELIMITER $$
CREATE TRIGGER members_ins AFTER INSERT
ON Members FOR EACH ROW
CALL data_copy();
DELIMITER ;

5를 호출합니다.

구문 형식:

DROP TRIGGER 트리거 이름

예: 트리거 멤버 삭제_ins
DROP TRIGGER members_ins;

위 내용은 MySQL에서 저장 함수를 생성하고 트리거를 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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