1. 개념
일부 SQL 문 모음, 그들은 컴파일되어 데이터베이스에 저장 한 저장 프로 시저 및 함수는 이해 될 수있다.
시나리오 2. 사용
데이터 분석 및 요약에 필요한 시간 자신의 시스템 데이터 형식 변환 할 수 있습니다.
작성 및 전화 (3)
만들기
create procedure 存储过程名称(参数列表)
其他修饰符
存储过程
전화
() 저장 프로 시저 이름을 호출
4. 예
DROP procedure xx_procedure;
create procedure xx_procedure(in x int) -- in表示输入
begin
select * from user where id = x;
end
-- 执行
call xx_procedure(1);
파라미터 타입
1 카테고리 : OUT, INOUT에서
2. 정의
. (1) 상기 입력 파라미터 표현
(2)가 출력하는 출력 파라미터를 나타낸다
(3) 입출력 입력을 나타 내기 위해 사용될 수 있고, 출력이 또한 이용 될 수있다
이해 5
1. 저장 프로 시저의 장점은 로직 데이터베이스 측에 캡슐화된다, SQL 직접 실행 결과와 그 결과는 동일하다 SQL 문 동등하다.
우리가 저장 프로 시저를 호출 할 때 2. 그것은 호출 시스템에 영향을주지 않습니다, 변경 사항은 데이터베이스 측에서 저장 프로 시저를 수정해야 로직하면, 내부 논리를 이해 할 필요가 없습니다.
3. 현상액이 많은 작업을 간소화 할 애플리케이션 및 데이터베이스 서버 데이터베이스 사이의 전송의 감소는, 데이터 처리의 효율성을 향상시킬 수있다.
6. 변수
1. 저장 공정 변수의 범위에만 존재 ... 단부를 시작 상기 선언 정의하여 정의 될 수있다.
변수 2. 정의는 처음에 그 성명에서, 그리고 다른 문 전에해야합니다. 처분 할 수있는 여러 변수를 선언 기본 제공 기본 값을 사용할 수 있습니다.
3. 구문 : 선언 변수 이름은 1, 변수 이름이 ...] 변수 유형 [기본 기본]
4. 변수는 기본값을 제공 할 수 있습니다, 또한 쿼리 반환에게 값을 수신 할 수있다
, 5. 직접 할당하여 SET 구문 : 설정 변수 이름 = 값 .
6. 당신은 또한 할당의 결과를 조회 할 수 있습니다, 결과는 테이블 이름 다른 문에서 변수 이름에 열 이름을 선택 문법 데이터 요구 사항의 하나의 행이다.
Drop procedure xx_procedure;
create procedure xx_procedure(in x int, out y varchar(20))
begin
declare s varchar(20);
select xx_name into s from `user` where id = x;
set y = s;
end
--执行
call xx_procedure(1, @a);
select @a;
7. 데이터 유형
1. 숫자 유형 : INT, 플로트, 더블, 소수
2. 날짜 유형 : 타임 스탬프, 날짜, 올해
3 문자열 : CHAR, VARCHAR, 텍스트
- : 타임 스탬프> 10 자리의 타임 스탬프 데이터를 가장 많이 사용되는 유형의
테이블이 다음 쿼리 필드가 함께하지 직접 문의에 관계없이 경우, 때문에, 사용하는 텍스트 형식이 고려 될 수있다 하위 테이블 번 : 텍스트 두 개 이상의 필드가있는 쿼리 텍스트 필드가 존재하는 경우, 일반적으로 ID의 값이 혼자에 따라 텍스트 필드를 취할 것입니다 경우에 소요되는 시간의 경우 느린 쿼리가 발생하기 쉽습니다
8. 플로우 제어 명령 다른 문법
if 的语法格式为:
if 条件表达式 then 语句
[elseif 条件表达式 then 语句] ....
[else 语句]
end if
case 的语法格式
首先是第一种写法:
case 表达式
when 值 then 语句
when 值 then 语句
...
[else 语句]
end case
然后是第二种写法:
case
when 表达式 then 语句
when 表达式 then 语句
....
[else 语句]
end case
loop 循环 语法格式为:
[标号:] loop
循环语句 end loop [标号]
while
while a>100 do 循环语句
End while
Repeat //游标
SQL语句1
UNTIL 条件表达式
END Repeat;
Loop
SQL语句
所有的条件判断和跳出需要自己实现
End loop
leave 语句用来从标注的流程构造中退出,它通常和 begin...end 或循环一起使用 leave 标号;
声明语句结束符,可以自定义:
DELIMITER [符合]
delimiter $$
$$
9. 커서
커서도 지칭 될 수
있는 루프 처리 중에 저장된 결과가
단계 : 선언 개방 값 폐쇄.
문법
DECLARE test_cursor CURSOR FOR 结果集; //声明游标
OPEN test_cursor; //打开游标
CLOSE test_cursor; //关闭游标
DECLARE CONTINUE HANDLER FOR NOT FOUND //结果集查询不到数据自动跳出
개요
- 커서 선언에 대한 구문 : 쿼리에 대한 선언 커서 이름 커서를;
- 커서의 구문 엽니 열린 커서의 이름을;
- 커서 데이터를 얻을 : 변수 이름 (1)에 커서 이름 페치 [변수 이름 2 ...]
- 커서 구문을 닫습니다 닫기 커서 이름을;
- 기본 지침 커서 : 처리주기에 따라 테이블에 조건을 결정하는주기의 끝은 다음 커서의 기록을 찾을 수없는 가져 오기, 커서를 끈 다음 프로세스를 종료합니다 캡처 조건에서 찾을 수 없습니다.
- 데이터 출력 변수, 조건, 커서, 응용 프로그램의 동작 확인이 임시 테이블에 배치됩니다 : 알 파스칼 프로그래밍 경험이 친구를 가지고있을 수 있습니다, 선언의 순서는 SQL에서, 우리는 정의가 선언 순서를 사용하는 것도 중요하다 다음 커서의 데이터를 읽어
경우
delimiter $$
create procedure exchange(out count int )
begin
declare supply_id1 int default 0;
declare amount1 int default 0; -- 游标标识
declare blag int default 1; -- 游标
declare order_cursor cursor for select supply_id,amount from order_group;
-- not found 这个异常进行处理
declare continue handler for not found set blag = 0; set count = 0;
-- 打开游标
open order_cursor;
-- 遍历
read_loop: LOOP
fetch order_cursor into supply_id1,amount1;
if blag = 0 then
leave read_loop;
end if;
if supply_id1 = 1 then
set count = count + amount1;
end if;
end loop read_loop;
end;
$$
delimiter ;
call exchange(@count);
select @count;
저장 프로 시저의 장점
- 첫 번째 포인트 장점은 빠른 실행 속도입니다. 각 SQL 문이 컴파일 된 모든 필요 우리가 있기 때문에, 다음 실행되지만 저장 프로 시저를 직접 실행, 직접 후 컴파일됩니다.
- 두 번째 장점은 네트워크 트래픽의 감소이다. 우리는 SQL 문 많은 수의 오버 헤드가 훨씬 작 운송보다 우리는 저장 프로 시저를 운반 할 것.
- 세 번째 장점은 시스템의 보안을 향상시키는 것입니다. 절차 스토리지 액세스 제어 때문에 사용될 수 있고, 저장 프로 시저의 파라미터 효과적으로 SQL 인젝션 공격을 방지 할 수있다. 의 안전을 보장합니다.
- 네 번째 이점은 커플 링이 감소된다는 것이다. 우리의 테이블 구조 조정 또는 변경이있는 경우, 우리는 저장 프로 시저를 수정할 수 있습니다, 우리의 응용 프로그램의 요구는 어디 작은에 어느 정도 변경 될 수 있습니다.
- 다섯 번째 포인트 장점 재사용 강하다. 우리가 저장 프로 시저 호출을 작성 후 다시 단 하나의 이름, 또는 필요하기 때문에 "한 번 쓰기, 어디서나 전화"및 저장 프로 시저도 강화 모듈 수 있습니다 사용합니다.
저장 프로 시저의 단점
- 첫 번째 단점은 불량한 이동성이다. 저장 프로 시저 및 데이터베이스가 결합되어 있기 때문에 우리는 데이터베이스 등의 작업을 대체 할 경우, 당신은 많은 곳에서 변경해야 할 수도 있습니다.
- 두 번째 단점은 불편 수정된다. 저장 프로 시저, 우리가 디버깅에 특히 효과가 없기 때문에, 일부 버그가 응용 프로그램의 위험을 증가 훨씬 나중에 발견 될 수있다.
- 세번째 단점은, 명백한 장점과 불필요한 기능 이상이다. 작은 웹 응용 프로그램의 경우 우리가 명령문 캐시를 사용하는 경우, SQL 컴파일 오버 헤드가 크지 찾았지만, 그들은 오버 헤드의 종류를 필요로하는 권한을 확인하기 위해 저장 프로 시저의 사용은, 이러한 기능은 어느 정도 더 불필요한보다는 성능에 드래그 될 것입니다.