>데이터 베이스 >MySQL 튜토리얼 >MySQL 데이터베이스의 트리거 및 저장 프로시저 인스턴스 분석

MySQL 데이터베이스의 트리거 및 저장 프로시저 인스턴스 분석

王林
王林앞으로
2023-05-27 11:46:061739검색

1. 실험 목적

  • 1. 주류 DBMS에서 지원하는 SQL 프로그래밍 언어와 프로그래밍 사양을 숙지하고, 저장 프로시저의 설계를 표준화합니다.

  • 2. 다양한 유형의 트리거 및 트리거 유효성 확인

  • 3. 학생들의 시스템 사고력을 배양하고 복잡한 엔지니어링 문제를 해결하는 데 필요한 프로그래밍 능력을 향상시킵니다.

2. 실험 요구 사항

주류 DBMS의 SQL 프로그래밍 언어를 마스터하고, 이전에 생성된 데이터베이스를 기반으로 BEFORE(for) 트리거와 AFTER 트리거를 정의합니다. 데이터베이스 저장 프로시저 정의, 저장 프로시저 작업, 저장 프로시저를 마스터합니다. 이름 바꾸기, 저장 프로시저 삭제, 저장 프로시저의 매개변수 전송 등이 포함됩니다.

알림: 다음 내용은 테스트를 거쳤으나 필연적으로 누락이 있을 수 있지만 테스트 후 대부분의 아이디어와 코드 구현이 정확합니다.

3. 구현 내용 및 단계

1. 매개 변수 없이 간단한 저장 프로시저 만들기

  • (1) 각 과정에서 학생의 평균 점수를 쿼리하는 기능을 구현하는 저장 프로시저를 만듭니다.

delimiter//
CREATE PROCEDURE sp_avggrade()
COMMENT '查询每门课程学生的平均成绩的功能'
BEGIN
SELECT cno as 课程号,avg(grade)as 平均成绩
FROM sc
GROUP BY cno;
end//
delimiter;

(2) 저장 프로시저를 호출하여 쿼리를 구현합니다.

call sp_avggrade();

2 입력 매개변수를 사용하여 저장 프로시저 만들기

(1) 강좌 번호 매개 변수를 입력하여 지정된 강좌 번호로 강좌의 평균 성적을 쿼리하는 기능을 구현하는 저장 프로시저 sp_course_avggrade를 만듭니다.

delimiter//
CREATE PROCEDURE sp_course_avggrade(IN c_no CHAR(2))
COMMENT '通过输入课程编号参数查询指定课程编号的课程平均成绩的功能'
BEGIN
SELECT cno,AVG(grade)
FROM sc
WHERE cno=c_no;
END//
delimiter;

(2) 지정된 강좌의 평균 성적을 얻으려면 이 저장 프로시저를 호출하세요.

3. 입력 및 출력 매개변수를 사용하여 저장 프로시저 생성

(1) 사용자가 입력한 학과 번호 매개변수를 기반으로 대학의 학생 수를 찾아 출력하는 기능을 구현하기 위해 저장 프로시저 sp_sdept _student를 생성합니다.

delimiter//
CREATE PROCEDURE sp_sdept_student2(IN _sdept CHAR(10),OUT num int)
BEGIN
SELECT COUNT(sno) INTO num
FROM student
WHERE _sdept = sdept;
END//
delimiter;

(2) 저장 프로시저를 호출하여 해당 학과의 학생 수를 반환 변수 형태로 얻어옵니다.

SET @num=10;
CALL sp_sdept_student2('计科',@num);
SELECT @num AS '人数';

4. 트리거 생성 및 사용

(1) 학생 테이블에서 학생 기록이 삭제될 때 성적 테이블에서 학생 성적 기록의 계단식 삭제를 실현하는 트리거를 생성합니다. (2) 과목 선택 테이블에 트리거를 생성합니다. 입력된 점수가 100점보다 크고 0점보다 작을 경우 기록 삽입이 거부되고 표시됩니다.

delimiter//
CREATE TRIGGER delete_stu
BEFORE DELETE
ON student
FOR EACH ROW
BEGIN
DELETE
FROM sc
WHERE sc.sno=old.sno;
END//
delimiter;

(3) (3)에서 트리거를 확인합니다. 1) 및 (2)

확인(1)

delimiter//
CREATE TRIGGER scgrade
BEFORE INSERT ON sc
FOR EACH ROW
BEGIN
IF new.grade>100 or new.grade < 0 THEN
SIGNAL SQLSTATE &#39;45000&#39;
SET message_text=&#39;录入成绩不符合规定,拒绝插入&#39;;
END IF;
END//
delimiter;

확인(2)

DELETE
FROM student
WHERE sno=&#39;201513&#39;;

위 내용은 MySQL 데이터베이스의 트리거 및 저장 프로시저 인스턴스 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제