[MYSQL 참고 사항] 저장 프로시저 사용

참고: 저장 프로시저는 버전 5.0 이상에서 사용할 수 있습니다.

저장 프로시저 :

여러 SQL 문을 "call xx" 명령을 사용해야만 실행할 수 있는 컬렉션으로 결합되며, 컬렉션을 저장 프로시저라고 합니다.

저장은 저장을 의미하고 프로세스는 단계를 의미합니다.

즉, 저장 프로시저는 일련의 단계를 요약하고 저장하는 모음입니다.

미리 준비된 명령을 자동으로 실행할 수 있어 처리 효율이 높다.

그러나 중요한 데이터를 저장할 때 완전히 검증되지 않은 저장 프로시저를 실행하는 것은 매우 위험합니다.

저장 프로시저 만들기:

create procedure 存储过程名()
begin
SQL语句1
SQL语句2
end

콘텐츠는 처음부터 끝까지 저장 프로시저의 본문입니다.

구분자 문제:

저장 프로시저의 내용은 일반 SQL문이므로 명령 끝에 구분 기호 ;를 추가해야 합니다.

begin
sql1;
sql2;
end

이런 식으로 create procedure 명령은 저장 프로시저의 불완전한 상태에서 실행됩니다. MYSQL 모니터에 구분 기호가 입력되면 내용이 무엇이든 구분 기호 앞 부분이 먼저 실행되기 때문입니다.

솔루션: 구분 기호 설정 수정

저장 프로시저를 생성할 때 구분 기호를;에서 다른 적합성으로 변경해야 하며 일반적으로 //를 사용합니다.

delimiter //

예: display tb 및 tb1을 실행하는 저장 프로시저 만들기

delimiter //
create procedure pr1()
begin
select * from tb;
select * from tb1;
end
//delimiter ;

저장 프로시저를 실행합니다.

예: 이전 예의 pr1 호출

call pr1;

 

매개변수를 사용하여 저장 프로시저를 만듭니다.

create procedure 存储过程名(参数名 数据类型);

예: 판매가 지정된 값보다 크거나 같음을 보여주는 레코드를 만들고 저장 프로시저를 실행합니다.

delimiter //
create procedure pr(d int)
begin
select * from tb where sales>=d;
end


call pr(200); 

참고: 매개변수 앞에 추가해도 동일한 결과(d int)를 얻습니다.

저장 프로시저의 내용을 표시합니다.

show create procedure pr;

 저장 프로시저 삭제

drop procedure 存储过程名;

 저장 함수: 저장 함수는 기본적으로 저장 프로시저와 같은 사고 방식과 작동 방식입니다. 저장 프로시저와의 유일한 차이점은 저장 함수가 실행 후 값을 반환한다는 것입니다.

저장 함수는 함수로 작동할 수 있으며 저장 함수를 사용하여 사용자 정의 함수를 만들 수 있습니다. 따라서 저장 함수를 사용자 정의 함수라고도 합니다.

저장 함수에서 반환된 값은 선택 및 업데이트와 같은 명령에서 일반 함수로 사용할 수 있습니다.

create function 存储函数名(参数 数据类型)returns 返回值的数据类型
begin
SQL语句
return 返回值 表达式
end

변수 선언:

declare 变量名 变量类型;

변수에 값 할당:

a into b;//b=a;

 

연습: 저장된 함수를 사용하여 표준 무게 계산

표준체중 = 키 * 키(cm) * 22/10000

delimiter //
create function fu1(height int) returns double
begin
return height*height*22/10000;
end
//
delimiter;

select fu1(174);

 

 연습: 판매 열의 평균을 반환합니다.

delimiter //
create function fun2() return double
begin
declare r double;
select avg(sales) into r from tb;
return r;
end
//
delimiter ;

select fun2();

저장된 함수의 내용 표시

show create function 存储函数名;

저장된 함수 삭제

drop function 存储函数名;

트리거: 테이블에서 작업이 수행된 후 다른 명령의 실행을 트리거하는 메커니즘입니다.

삽입, 업데이트, 삭제 등의 명령을 실행할 때 미리 트리거로 설정한 작업도 함께 실행됩니다.

트리거는 종종 처리 기록으로 사용되거나 처리 실패 시 백업으로 사용됩니다.

트리거가 실행되면:

before: 테이블이 처리되기 전에 발생

after: 테이블이 처리된 후 트리거됨

 

테이블 처리 전 열 값 가져오기: old.column_name

테이블 처리 후 열 값 가져오기:  new.column 이름

단, 명령어에 따라 일부 컬럼 값을 빼낼 수 있고, 일부 컬럼 값을 빼낼 수 있습니다.

 

예: "테이블에서 레코드를 삭제하면 삭제된 레코드가 다른 테이블로 복사됩니다" 트리거를 생성합니다.

tb에 삭제된 레코드를 삽입하기 위해 미리 빈 테이블 tb1을 생성합니다.

create table tb1 like tb;

트리거 생성 및 tb 삭제

delimiter //
create trigger tr before delete on tb1 for each row
begin
insert into tb1(old.id,old.name,old.age);
end
//
delimiter ;

delete from tb1;

 설정된 트리거 확인:

show triggers;

트리거 삭제:

drop trigger 触发器名;

 

 

추천

출처blog.csdn.net/m0_52043808/article/details/124221961