ホームページ >データベース >mysql チュートリアル >MySQL データベースのトリガーとストアド プロシージャ インスタンスの分析

MySQL データベースのトリガーとストアド プロシージャ インスタンスの分析

王林
王林転載
2023-05-27 11:46:061751ブラウズ

1. 実験の目的

  • #1. 主流の DBMS でサポートされている SQL プログラミング言語とプログラミング仕様をマスターし、ストアド プロシージャの設計を標準化します。

  • 2. さまざまな種類のトリガーの機能と実行原理を理解し、トリガーの有効性を検証できる;

  • 3. 生徒のシステム思考を養い、改善する複雑なエンジニアリング問題を解決するために必要なスキル、プログラミング能力。

2. 実験要件

主流の DBMS の SQL プログラミング言語をマスターし、以前に作成したデータベースに基づいて BEFORE (for) トリガーと AFTER トリガーを定義します。データベース ストアド プロシージャの定義、ストアド プロシージャの操作、ストアド プロシージャの名前変更、ストアド プロシージャの削除、ストアド プロシージャのパラメータ転送。

注意事項: 次のコンテンツはテスト済みであり、必然的に省略が存在しますが、コードのアイデアと実装のほとんどはテスト後に正しくなります。

3. 実装内容と手順

1. パラメーターを使用しない単純なストアド プロシージャの作成

  • (1) ストアド プロシージャ sp_avggrade を作成し、実装します。各コースの学生の平均スコアをクエリする関数;

  • 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 を作成します。数値パラメータ 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 &#39;45000&#39;
SET message_text=&#39;录入成绩不符合规定,拒绝插入&#39;;
END IF;
END//
delimiter;

(3) (1)と(2)のトリガーを確認します

(1)

DELETE
FROM student
WHERE sno=&#39;201513&#39;;
を確認します

検証 (2)

INSERT INTO sc(sno,cno,grade)
VALUES(&#39;2002720&#39;,&#39;1&#39;,200);

以上がMySQL データベースのトリガーとストアド プロシージャ インスタンスの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。