참고: 저장 프로시저는 버전 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 触发器名;