저장 프로세스 (1)

3803 단어
MySQL 데이터베이스는 5.0 버전 이후 저장 프로세스를 지원하기 시작했습니다. 그러면 저장 프로세스는 무엇입니까?어떻게 저장 프로세스를 만들고, 보고, 삭제합니까?스토리지 프로세스의 이점은 무엇입니까?이 단원에서는 다음 사항을 다룹니다.
스토리지 프로세스란 무엇입니까?
간단하게 말하면 저장 프로세스는 어떤 데이터베이스에서 특정한 기능을 완성하기 위해 작성된 문장집으로 이 문장집은 SQL 문장(데이터에 대한 삭제 수정), 조건 문장과 순환 문장 등을 포함한다.
스토리지 생성 프로세스:
스토리지 프로세스는 다음과 같은 간단한 구조를 통해 생성됩니다.
CREATE PROCEDURE proc_name ([proc_parameter[,...]])  
[characteristic ...] 
routine_body
설명:
        proc_name은 저장 프로세스 이름을 나타냅니다.
        proc_parameter는 저장 프로세스 매개 변수 목록을 대표합니다.목록의 각 매개변수는 입력 출력 유형, 매개변수 이름 및 매개변수 유형 세 부분으로 구성됩니다.형식은 다음과 같습니다. [IN | OUT | INOUT] paramname type, 그 중에서 [IN | OUT | INOUT]는 출력 유형을 나타낸다(IN은 입력 파라미터를 나타내고, OUT는 출력 파라미터를 나타내며, INOUT는 입력일 수도 있고 출력일 수도 있다).param_name 은 매개변수 이름을 나타냅니다.type은 MySQL 데이터베이스의 모든 데이터 유형이 될 수 있는 매개변수 유형을 나타냅니다.
characteristic는 저장 프로세스의 특성을 지정합니다.이 매개변수에는 여러 값이 있습니다.
LANGUAGE SQL: 설명 루틴body 섹션은 데이터베이스 시스템 기본값인 SQL 언어의 문으로 구성됩니다.
[NOT] DETERMINISTIC: 저장 프로세스의 실행 결과가 확실한지 여부를 나타냅니다.DETERMINISTIC는 결과가 확실하다는 것을 나타낸다. 이 때 저장 프로세스를 실행할 때마다 같은 입력이 같은 출력을 받는다.NOT DETERMINISTIC는 결과가 부정확하다는 것을 나타냅니다. 이때 같은 입력은 다른 출력을 얻을 수 있습니다.기본값은 불확정입니다.
{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}: 서브루틴의 SQL 문 사용 제한을 나타냅니다.CONTAINS SQL은 하위 프로그램이 SQL 문장을 포함하지만 데이터를 읽거나 쓰는 문장은 포함하지 않는다는 것을 나타낸다.NO SQL은 서브루틴에 SQL 문이 포함되지 않음을 나타냅니다.READS SQL DATA는 서브루틴에 읽기 데이터가 포함된 문을 나타냅니다.MODIFIES SQL DATA는 서브루틴에 데이터를 쓰는 문이 있음을 나타냅니다.기본값은 CONTAINS SQL입니다.
SQL SECURITY {DEFINER | INVOKER}: 수행할 권한이 있는 사용자를 나타냅니다.DEFINER는 정의자 자신만 실행할 수 있음을 나타냅니다.INVOKER는 호출자가 수행할 수 있음을 나타냅니다.기본값은 DEFINER입니다.
COMMENT'string': 프로세스 주석 정보를 저장합니다.
        routine_body 매개 변수는 SQL 코드의 내용으로 BEGIN...END로 SQL 코드의 시작과 끝을 표시할 수 있습니다.
예: 테이블 구조 생성:
CREATE TABLE `user` (
     `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '  ',
  	`real_name` varchar(8) NOT NULL COMMENT '  ',
  	`age` int(3) DEFAULT NULL COMMENT '  ',
  	PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=223 DEFAULT CHARSET=utf8;
스토리지 생성 프로세스:
DELIMITER && 
        CREATE PROCEDURE num_from_user (IN u_real_name VARCHAR(15), OUT count_num INT) 
        READS SQL DATA 
        BEGIN 
                SELECT COUNT(*) INTO count_num FROM USER WHERE real_name LIKE u_real_name; 
        END && 
DELIMITER ;
설명: 위에 이름이numfrom_사용자의 저장 프로세스;입력 변수 ureal_name;출력 변수는countnum.
SELECT 문이 사용자 테이블에서 조회 real 흐림name 값은 ureal_name의 레코드와 COUNT(*)로 조건에 맞는 데이터 총수를 통계한 다음count 에 결과를 저장합니다num 중.
참고: MySQL의 기본 문 끝 문자는 세미콜론(;)이고,저장 과정 중의 SQL 문장은 분호로 끝내야 한다. 충돌을 피하기 위해 먼저'DELIMITER & &'로 MySQL의 끝 문자를 &&&로 설정하고 마지막에'DELIMITER'로 한다.자, 끝부호를 성분호로 회복합니다.이것은 트리거를 만드는 것과 같습니다.
스토리지 프로세스를 호출하려면 다음과 같이 하십시오.
SET @u_real_name=' %';  
CALL num_from_user(@u_real_name,@count_num); 
SELECT @count_num AS total;
설명: 위에 왕씨 성을 가진 사람의 수가 표시되어 있는데, 그중 @ureal_name 및 @countnum은 사용자 이름 변수입니다.
스토리지 프로세스를 보려면 다음과 같이 하십시오.
저장 프로세스의 보기는 다음과 같은 문장을 통해 실현할 수 있다. SHOW PROCEDURE STATUS WHERE db='데이터베이스 이름'.또는 SHOW CREATE PROCEDURE 데이터베이스 이름입니다.저장 프로세스 이름;
저장 프로세스 삭제
저장 프로세스의 삭제는 다음과 같은 문장을 통해 실현할 수 있다. DROP PROCEDURE 저장 프로세스 이름
스토리지 프로세스의 이점:
1. 저장 프로세스는 SQL 언어의 유연성을 향상시켰다.저장 과정은 제어 문장을 사용하여 복잡한 판단과 복잡한 연산을 완성할 수 있어 유연성이 강하다.
2. 네트워크 트래픽을 줄이고 네트워크 부하를 줄인다.저장 프로세스는 데이터베이스 서버에서 성공적으로 만들어진 후에 이 저장 프로세스를 호출하면 된다. 전통적인 방법은 매번 대량의 SQL 문장을 네트워크를 통해 데이터베이스 서버에 보내고 실행하는 것이다.
3. 저장 프로세스는 창조할 때만 컴파일하고 이후에 저장 프로세스를 실행할 때마다 다시 컴파일할 필요가 없다. 일반적인 SQL 문장은 실행할 때마다 한 번씩 컴파일하기 때문에 저장 프로세스를 사용하면 데이터베이스의 실행 속도를 높일 수 있다.
4. 시스템 관리자는 특정한 저장 과정의 권한을 설정함으로써 해당하는 데이터에 대한 접근 권한을 제한하고 비수권 사용자가 데이터에 대한 접근을 피하며 데이터의 안전을 확보한다.

좋은 웹페이지 즐겨찾기