>  기사  >  데이터 베이스  >  MySQL C 저장 프로시저

MySQL C 저장 프로시저

PHPz
PHPz원래의
2023-05-14 13:24:071094검색

MySQL은 매우 일반적으로 사용되는 관계형 데이터베이스 관리 시스템으로, 대용량 데이터를 저장, 처리 및 관리하는 데 사용할 수 있습니다. 저장 프로시저는 MySQL에서 제공하는 매우 유용한 기능으로 일련의 SQL 문을 재사용 가능한 코드 블록으로 캡슐화하여 SQL 문의 실행 효율성을 높이고 코드 복잡성을 줄이고 보안을 향상시킬 수 있습니다. 따라서 MySQL 저장 프로시저의 사용을 익히는 것은 데이터베이스 개발 및 관리의 효율성을 향상시키는 데 매우 중요합니다.

1. 저장 프로시저 소개

저장 프로시저는 MySQL에 정의된 미리 컴파일된 SQL 문 모음입니다. 쿼리할 때 저장 프로시저만 호출하면 됩니다. SQL 문만 실행하는 것과 비교하여 저장 프로시저는 네트워크 오버헤드를 크게 줄이고 데이터 쿼리 및 처리 효율성을 향상시킬 수 있습니다.

또한 저장 프로시저에는 다음과 같은 중요한 기능이 있습니다.

  1. 보안: 데이터베이스에 대한 사용자의 액세스 권한 및 데이터 액세스 방법은 저장 프로시저를 통해 제어할 수 있습니다.
  2. 논리: 저장 프로시저는 계산, 루프, 판단 등과 같은 복잡한 데이터 작업을 완료할 수 있습니다.
  3. 유지 관리성: 저장 프로시저는 코드 재사용을 늘리고 코드 양을 줄여 데이터베이스 유지 관리 및 업데이트를 용이하게 할 수 있습니다.

2. 저장 프로시저의 구문 형식

MySQL에서 저장 프로시저를 정의하려면 CREATE PROCEDURE 문을 사용해야 합니다. CREATE PROCEDURE 문의 기본 구문 형식은 다음과 같습니다.

CREATE PROCEDURE 存储过程名称(参数列表)
BEGIN
    -- sql语句
END;

그 중 저장 프로시저 이름이 필수이며, 필요에 따라 매개변수 목록을 생략할 수 있습니다. BEGIN과 END 사이에서 일련의 SQL 문을 작성하여 데이터 쿼리, 쓰기, 수정 및 기타 관련 작업을 수행할 수 있습니다.

다음은 간단한 저장 프로시저의 예입니다. 저장 프로시저에는 매개변수가 하나만 있으며 간단히 수정하여 반환합니다.

CREATE PROCEDURE test_proc(IN num INT)
BEGIN
    SET num = num + 1;
    SELECT num;
END;

저장 프로시저 실행 시 CALL 문을 통해 호출할 수 있습니다.

CALL test_proc(10);

실행 결과 11 입니다.

3. 저장 프로시저의 매개변수

저장 프로시저에서는 IN, OUT, INOUT의 세 가지 유형의 매개변수를 사용할 수 있습니다.

  1. IN 매개변수: 저장프로시저에서 전달된 매개변수 값을 나타내며, 저장프로시저에서 읽고 수정할 수 있다.
  2. OUT 매개변수: 하나 이상의 결과를 반환할 수 있는 저장 프로시저의 매개변수 값 출력을 나타냅니다.
  3. INOUT 매개변수: 스토어드 프로세스의 입력 및 출력 매개변수 값을 나타냅니다. 즉, 입력 매개변수 또는 출력 매개변수로 사용할 수 있습니다.

다음은 매개변수가 있는 저장 프로시저의 예입니다.

CREATE PROCEDURE get_user_by_id(IN userid INT, OUT username VARCHAR(50))
BEGIN
    SELECT username FROM user WHERE id=userid;
    SET username = CONCAT('Welcome, ', username);
END;

이 저장 프로시저를 호출할 때 userid 매개변수를 전달하고 사용자 이름 출력 매개변수를 수신하는 변수를 정의해야 합니다.

DECLARE uname VARCHAR(50);
CALL get_user_by_id(1, @uname);
SELECT @uname;

4. 저장 프로시저의 프로세스 제어 및 루프

저장 프로시저는 SQL 문을 직접 실행하는 것 외에도 흐름 제어 문 및 루프 문을 사용하여 특정 논리 작업을 완료할 수도 있습니다. MySQL은 다음과 같은 흐름 제어 문을 지원합니다:

  1. IF, ELSEIF 및 ELSE: 조건 분기를 구현하는 데 사용됩니다.
  2. CASE, WHEN 및 ELSE: 여러 조건부 분기를 구현하는 데 사용됩니다.
  3. LOOP 및 END LOOP: 간단한 루프를 구현하는 데 사용됩니다.
  4. WHILE DO 및 END WHILE: 복잡한 루프를 구현하는 데 사용됩니다.

다음은 WHILE DO 루프의 예입니다. 이 저장 프로시저는 사용자 테이블의 수명에 1년을 추가합니다.

CREATE PROCEDURE update_user_age()
BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE n INT;
    SELECT COUNT(*) FROM user INTO n;
    WHILE i<=n DO
        UPDATE user SET age=age+1 WHERE id=i;
        SET i=i+1;
    END WHILE;
END;

이 저장 프로시저를 실행할 때는 다음만 호출하면 됩니다.

CALL update_user_age();

5. 예외 처리 저장 프로시저에서

저장 프로시저에서 오류가 발생하면 예외 처리를 사용하여 프로그램 충돌을 방지할 수 있습니다. MySQL에서는 DECLARE ... HANDLER 구문을 사용하여 예외 처리를 구현합니다.

다음은 사용자 테이블 레코드를 삭제할 때 해당 레코드가 다른 테이블에서 이미 참조되고 있는 경우 저장 프로시저에서 예외 처리의 예입니다.

CREATE PROCEDURE delete_user(IN userid INT)
BEGIN
    DECLARE exit_test CONDITION FOR SQLSTATE '23000';
    START TRANSACTION;
    DELETE FROM user WHERE id=userid;
    IF ROW_COUNT() = 0 THEN
        SIGNAL exit_test;
    END IF;
    COMMIT;
END;

저장 프로시저를 실행할 때 예외가 발생하면 이를 처리하기 위해 다음 프로그램 코드를 작성할 수 있습니다.

DECLARE EXIT HANDLER FOR SQLSTATE '23000'
    -- 处理异常
END;    

6. 저장 프로시저 최적화

저장 프로시저가 SQL 쿼리의 효율성을 향상시킬 수 있지만, 저장 프로시저가 디자인이 불합리하면 쿼리 효율성이 저하될 수도 있습니다. 다음은 저장 프로시저에 대한 몇 가지 최적화 제안 사항입니다.

  1. 임시 변수와 루프 문을 너무 많이 사용하지 마십시오. 이렇게 하면 저장 프로시저의 실행 효율성이 크게 저하됩니다.
  2. 흐름 제어 문을 사용할 때는 SELECT 대신 RETURN을 사용해야 합니다.
  3. 저장 프로시저에서 준비된 문 문을 사용하여 데이터를 쿼리하고 업데이트하면 쿼리 효율성이 향상될 수 있습니다.
  4. 저장 프로시저 대신 뷰 또는 조인 쿼리 사용을 고려하세요.

간단히 말하면, 저장 프로시저는 MySQL에서 매우 중요한 기능으로, SQL 문의 실행 효율성을 높이고, 코드 복잡성을 줄이고, 보안을 향상시킬 수 있습니다. 저장 프로시저를 사용할 때는 매개변수, 프로세스 제어, 예외 처리 등에 주의해야 합니다. 또한 저장 프로시저를 최적화하여 데이터베이스 쿼리 및 업데이트 효율성을 향상시키는 방법도 고려해야 합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.