> 데이터 베이스 > MySQL 튜토리얼 > mysql은 저장 프로시저를 사용한다

mysql은 저장 프로시저를 사용한다

王林
풀어 주다: 2023-05-20 10:25:37
원래의
1563명이 탐색했습니다.

MySQL은 현재 가장 널리 사용되는 관계형 데이터베이스 관리 시스템입니다. 이는 저장 프로시저를 사용하여 SQL 문과 프로그램의 실행을 더 잘 유지하고 관리합니다. 저장 프로시저는 일반적으로 사용되는 SQL 문을 캡슐화하여 여러 실행 중에 효율성을 높이고 런타임 리소스 사용량을 줄일 수 있는 미리 컴파일된 SQL 코드 블록입니다.

MySQL의 저장 프로시저 사용

1. 저장 프로시저 생성

기본적으로 저장 프로시저를 생성한다는 것은 SQL 문 블록을 작성하고 이 코드 블록을 시스템 데이터베이스에 저장하는 것입니다. 다음은 구체적인 예입니다.

CREATE PROCEDURE `procedure_name` (`parameter_list`)
BEGIN
    -- SQL 语句块
END
로그인 후 복사

그 중 procedure_name은 저장 프로시저의 이름이고, paramter_list는 입력을 포함할 수 있는 저장 프로시저의 매개변수 목록입니다. 매개변수 및 출력 매개변수는 물론 매개변수를 포함할 수 없습니다. procedure_name 是存储过程的名称,paramter_list 是存储过程的参数列表,可以包括入参、出参,也可以不包含参数。

例如,我们创建一个获取用户信息的存储过程:

CREATE PROCEDURE `get_user_info`(user_id INT)
BEGIN
    SELECT * FROM `user` WHERE `user_id` = user_id;
END
로그인 후 복사

在存储过程的 SQL 语句块中,我们可以使用 MySQL 支持的所有 SQL 语句,如 SELECT、INSERT、UPDATE、DELETE 等,还可以使用控制流语句,例如 IF、WHILE、LOOP 等,从而实现更复杂的数据逻辑处理。

2、调用存储过程

创建存储过程之后,我们可以通过 CALL 语句来调用存储过程,并向其传递参数:

CALL procedure_name(param1, param2, ...)
로그인 후 복사

例如,我们可以按如下方式调用上面定义的 get_user_info 存储过程:

CALL `get_user_info`(1);
로그인 후 복사

3、删除存储过程

如果随着时间的推移,一个存储过程已经不再需要,可以使用 DROP PROCEDURE 语句删除它:

DROP PROCEDURE `procedure_name`;
로그인 후 복사

例如:

DROP PROCEDURE `get_user_info`;
로그인 후 복사

4、存储过程实例

我们来看一个完整的存储过程实例。假设我们有一个 score 表,存储了学生的考试成绩,而我们需要计算出每个学生的总分、平均分,并按照总分从高到低排列。这时可以使用存储过程来实现:

CREATE PROCEDURE `calc_stu_score`()
BEGIN
     DECLARE `total_score` INT;
     DECLARE `avg_score` FLOAT;
     DECLARE `stu_id` INT DEFAULT 0;
     DECLARE `stu_name` VARCHAR(255);
     DECLARE `total` INT DEFAULT 0;
    DECLARE `cursor_stu_id` CURSOR FOR SELECT `stu_id` FROM `score` GROUP BY `stu_id`;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;

    DROP TEMPORARY TABLE IF EXISTS `tmp_score`;
    CREATE TEMPORARY TABLE `tmp_score` (
        `stu_id` INT NOT NULL,
        `stu_name` VARCHAR(255) NOT NULL,
        `total_score` INT NOT NULL,
        `avg_score` FLOAT NOT NULL,
        PRIMARY KEY (`stu_id`)
    );

    OPEN cursor_stu_id;

    stu_loop: LOOP
        FETCH cursor_stu_id INTO stu_id;
        IF finished = TRUE THEN 
            LEAVE stu_loop;
        END IF;

        SELECT `name` INTO stu_name FROM `student` WHERE `stu_id` = stu_id;

        SELECT SUM(`sorce`), COUNT(*) INTO total_score, total FROM `score` WHERE `stu_id` = stu_id;

        SET avg_score = total_score / NULLIF(total, 0);

        INSERT INTO `tmp_score` (`stu_id`, `stu_name`, `total_score`, `avg_score`) VALUES (stu_id, stu_name, total_score, avg_score);

    END LOOP;

    CLOSE cursor_stu_id;

    SELECT * FROM `tmp_score` ORDER BY `total_score` DESC;

    DROP TEMPORARY TABLE `tmp_score`;

END
로그인 후 복사

在这个存储过程中,我们首先定义了一些需要使用的变量,包括 total_score 表示某个学生的总分,avg_score 表示某个学生的平均分,stu_id 表示某个学生的编号,stu_name 表示某个学生的姓名,还有一个临时表 tmp_score

然后我们使用了 DECLARE CURSOR 语句声明了一个游标变量 cursor_stu_id,用于查询学生表中的学生编号。在循环中,我们根据这个学生编号查询成绩表,计算出该学生的总分和平均分,并将其保存到临时表中。最后,我们使用 SELECT 语句查询临时表,按照总分从高到低排序,并在最后使用 DROP TABLE 语句删除临时表。

最后,我们可以使用 CALL

예를 들어 사용자 정보를 얻기 위해 저장 프로시저를 생성합니다.

CALL `calc_stu_score`();
로그인 후 복사
저장 프로시저의 SQL 문 블록에서는 SELECT, INSERT, UPDATE, DELETE 등 MySQL이 지원하는 모든 SQL 문을 사용할 수 있습니다. , IF, WHILE, LOOP 등과 같은 제어 스트림 문을 사용하여 보다 복잡한 데이터 논리 처리를 달성할 수도 있습니다.

2 저장 프로시저 호출🎜🎜저장 프로시저를 생성한 후 CALL 문을 통해 저장 프로시저를 호출하고 매개변수를 전달할 수 있습니다. 🎜rrreee🎜예를 들어 위에 정의된 get_user_info를 호출할 수 있습니다. 다음 코드> 저장 프로시저: 🎜rrreee🎜3. 저장 프로시저 삭제🎜🎜시간이 지나면서 저장 프로시저가 더 이상 필요하지 않으면 DROP PROCEDURE 문을 사용하여 삭제할 수 있습니다. 🎜rrreee🎜예: 🎜rrreee🎜4. 저장 프로시저 예시🎜🎜전체 저장 프로시저 예시를 살펴보겠습니다. 학생들의 시험 점수를 저장하는 <code>점수 테이블이 있고, 각 학생의 총점과 평균 점수를 계산하고 총점에 따라 높은 것부터 낮은 것 순으로 정렬해야 한다고 가정해 보겠습니다. 이는 저장 프로시저를 사용하여 달성할 수 있습니다: 🎜rrreee🎜이 저장 프로시저에서는 먼저 학생의 총 점수를 나타내는 total_scoreavg_score는 특정 학생의 평균 점수를 나타내고, <code>stu_id는 특정 학생의 번호를 나타내며, stu_name은 특정 학생의 이름을 나타내며, 임시 테이블 tmp_score . 🎜🎜그런 다음 DECLARE CURSOR 문을 사용하여 학생 테이블에서 학생 번호를 쿼리하는 데 사용되는 커서 변수 cursor_stu_id를 선언했습니다. 루프에서는 이 학생 번호를 기반으로 점수 테이블을 쿼리하고 학생의 총점과 평균 점수를 계산하여 임시 테이블에 저장합니다. 마지막으로 SELECT 문을 사용하여 임시 테이블을 쿼리하고 총 점수를 높은 순으로 정렬한 다음 마지막으로 DROP TABLE 문을 사용하여 임시 테이블을 삭제합니다. 🎜🎜마지막으로 CALL 문을 사용하여 이 저장 프로시저를 호출할 수 있습니다. 🎜rrreee🎜요약🎜🎜 저장 프로시저는 MySQL의 매우 강력한 도구로, 데이터베이스 작업 프로세스를 크게 단순화하고 개선할 수 있습니다. 데이터베이스 성능 및 보안. 실제 응용 프로그램에서는 저장 프로시저를 사용하여 많은 복잡한 데이터 처리 작업을 완료하여 비즈니스 요구 사항을 더 효과적으로 충족하고 효율성을 향상하며 비용을 절감할 수 있습니다. 🎜

위 내용은 mysql은 저장 프로시저를 사용한다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿