MySQL은 매우 일반적으로 사용되는 관계형 데이터베이스 관리 시스템으로, 대용량 데이터를 저장, 처리 및 관리하는 데 사용할 수 있습니다. 저장 프로시저는 MySQL에서 제공하는 매우 유용한 기능으로 일련의 SQL 문을 재사용 가능한 코드 블록으로 캡슐화하여 SQL 문의 실행 효율성을 높이고 코드 복잡성을 줄이고 보안을 향상시킬 수 있습니다. 따라서 MySQL 저장 프로시저의 사용을 익히는 것은 데이터베이스 개발 및 관리의 효율성을 향상시키는 데 매우 중요합니다.
1. 저장 프로시저 소개
저장 프로시저는 MySQL에 정의된 미리 컴파일된 SQL 문 모음입니다. 쿼리할 때 저장 프로시저만 호출하면 됩니다. SQL 문만 실행하는 것과 비교하여 저장 프로시저는 네트워크 오버헤드를 크게 줄이고 데이터 쿼리 및 처리 효율성을 향상시킬 수 있습니다.
또한 저장 프로시저에는 다음과 같은 중요한 기능이 있습니다.
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의 세 가지 유형의 매개변수를 사용할 수 있습니다.
다음은 매개변수가 있는 저장 프로시저의 예입니다.
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은 다음과 같은 흐름 제어 문을 지원합니다:
다음은 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 쿼리의 효율성을 향상시킬 수 있지만, 저장 프로시저가 디자인이 불합리하면 쿼리 효율성이 저하될 수도 있습니다. 다음은 저장 프로시저에 대한 몇 가지 최적화 제안 사항입니다.
간단히 말하면, 저장 프로시저는 MySQL에서 매우 중요한 기능으로, SQL 문의 실행 효율성을 높이고, 코드 복잡성을 줄이고, 보안을 향상시킬 수 있습니다. 저장 프로시저를 사용할 때는 매개변수, 프로세스 제어, 예외 처리 등에 주의해야 합니다. 또한 저장 프로시저를 최적화하여 데이터베이스 쿼리 및 업데이트 효율성을 향상시키는 방법도 고려해야 합니다.
위 내용은 MySQL C 저장 프로시저의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!