時間:2022-06-20來源:www.www.newsthatmovesu.com作者:電腦系統城
觀前提示:本篇內容為mysql數據庫實驗,代碼內容經測試過,可能一小部分有所疏漏,也有會不符合每個人實驗的要求的地方,因此以下內容建議僅做思路參考。
掌握某主流DBMS的SQL編程語言,在前面創建的數據庫基礎上,定義BEFORE(for)觸發器和AFTER觸發器;掌握數據庫存儲過程定義、存儲過程運行,存儲過程更名,存儲過程刪除,存儲過程的參數傳遞。
溫馨提示:以下內容均已經過測試,不過難免會有疏漏,但是代碼實現大多數思路及實現經測驗都是正確的。
1 2 3 4 5 6 7 8 9 |
delimiter// CREATE PROCEDURE sp_avggrade() COMMENT '查詢每門課程學生的平均成績的功能' BEGIN SELECT cno as 課程號, avg (grade) as 平均成績 FROM sc GROUP BY cno; end // delimiter; |
(2)調用該存儲過程,實現查詢。
1 | call sp_avggrade(); |
(1)創建存儲過程sp_course_avggrade, 實現通過輸入課程編號參數查詢指定課程編號的課程平均成績的功能;
1 2 3 4 5 6 7 8 9 |
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)調用該存儲過程,獲取指定課程的平均成績。
(1)創建存儲過程sp_sdept _student,實現根據用戶輸入的院系編號參數,查找該學院的學生人數,并以變量形式輸出的功能;
1 2 3 4 5 6 7 8 |
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)調用該存儲過程,以返回變量的形式獲取相應院系的學生人數。
1 2 3 |
SET @num=10; CALL sp_sdept_student2( '計科' ,@num); SELECT @num AS '人數' ; |
(1)在學生表上創建觸發器,實現學生表中刪除學生記錄時,成績表中該學生成績記錄的級聯刪除;
1 2 3 4 5 6 7 8 9 10 11 |
delimiter// CREATE TRIGGER delete_stu BEFORE DELETE ON student FOR EACH ROW BEGIN DELETE FROM sc WHERE sc.sno=old.sno; END // delimiter; |
(2)在選課表上創建觸發器,若錄入的成績大于100分,小于0分,則拒絕插入記錄并顯示;
1 2 3 4 5 6 7 8 9 10 11 |
delimiter// CREATE TRIGGER scgrade BEFORE INSERT ON sc FOR EACH ROW BEGIN IF new.grade>100 or new.grade < 0 THEN SIGNAL SQLSTATE '45000' SET message_text= '錄入成績不符合規定,拒絕插入' ; END IF; END // delimiter; |
(3)驗證(1)、(2)中觸發器
驗證(1)
1 2 3 |
DELETE FROM student WHERE sno= '201513' ; |
驗證(2)
1 2 |
INSERT INTO sc(sno,cno,grade) VALUES ( '2002720' , '1' ,200); |
2022-06-20
Ubuntu安裝Mysql+啟用遠程連接的完整過程2022-06-20
MySQL數據庫實驗實現簡單數據庫應用系統設計2022-06-09
mysql 8.0.29 winx64.zip安裝配置方法圖文教程