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

王林
풀어 주다: 2023-05-27 11:46:06
앞으로
1716명이 탐색했습니다.

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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿