ホームページ >データベース >mysql チュートリアル >MySQL データベースのトリガーとストアド プロシージャ インスタンスの分析
注意事項: 次のコンテンツはテスト済みであり、必然的に省略が存在しますが、コードのアイデアと実装のほとんどはテスト後に正しくなります。
3. 実装内容と手順1. パラメーターを使用しない単純なストアド プロシージャの作成delimiter// CREATE PROCEDURE sp_avggrade() COMMENT '查询每门课程学生的平均成绩的功能' BEGIN SELECT cno as 课程号,avg(grade)as 平均成绩 FROM sc GROUP BY cno; end// delimiter;
(2) ストアド プロシージャを呼び出してクエリを実装します。2. 入力パラメータを使用したストアド プロシージャの作成call sp_avggrade();
(1) コースを入力して、指定されたコース番号のコース平均をクエリするストアド プロシージャ sp_course_avggrade を作成します。数値パラメータ Grade function;
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) 生徒テーブルから生徒レコードが削除されると、生徒のスコアのレベルが変更されることを認識するために、生徒テーブルにトリガーを作成します。得点表への記録 結合削除;
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点未満の場合、レコードの挿入を拒否します
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)
DELETE FROM student WHERE sno='201513';を確認します
検証 (2)
INSERT INTO sc(sno,cno,grade) VALUES('2002720','1',200);
以上がMySQL データベースのトリガーとストアド プロシージャ インスタンスの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。