저장 함수도 저장 프로시저와 유사한 프로시저 객체 중 하나입니다. 이러한 코드 조각에는 애플리케이션과 SQL에서 호출할 수 있는 SQL 및 절차문이 포함되어 있습니다. 그러나 몇 가지 차이점도 있습니다.
1. 저장 기능 자체가 출력 매개변수이기 때문에 저장 기능에는 출력 매개변수가 없습니다.
2. CALL 문은 저장된 함수를 호출하는 데 사용할 수 없습니다.
3. 저장 함수에는 RETURN 문이 포함되어야 하며, 이 특수 SQL 문은 저장 프로시저에 포함될 수 없습니다.
저장 함수를 만들려면 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 저장 함수 이름([매개변수 [,...]])예: 저장 함수 게시_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 트리거 이름 트리거 시간 트리거 이벤트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. 트리거에서 저장 프로시저를 호출합니다.
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를 호출합니다.
예: 트리거 멤버 삭제_ins
DROP TRIGGER members_ins;
위 내용은 MySQL에서 저장 함수를 생성하고 트리거를 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!