ホームページ >データベース >mysql チュートリアル >mysqlはストアドプロシージャを使用します

mysqlはストアドプロシージャを使用します

王林
王林オリジナル
2023-05-20 10:25:371565ブラウズ

MySQL は現在最も人気のあるリレーショナル データベース管理システムであり、ストアド プロシージャを使用して SQL ステートメントとプログラムの実行をより適切に維持および管理します。ストアド プロシージャは、よく使用される SQL ステートメントをカプセル化して複数の実行時の効率を向上させ、ランタイム リソースの使用量を削減できる、プリコンパイルされた SQL コード ブロックです。

MySQL でのストアド プロシージャの使用

1. ストアド プロシージャの作成

基本的に言えば、ストアド プロシージャの作成とは、SQL ステートメント ブロックを記述してシステム データベースに作成することです。このコード ブロックを保存します。具体的な例を次に示します。

CREATE PROCEDURE `procedure_name` (`parameter_list`)
BEGIN
    -- SQL 语句块
END

このうち、 procedure_name はストアド プロシージャの名前、 paramter_list はストアド プロシージャのパラメータ リストです。入力パラメータと出力パラメータを含めることも、パラメータを含めないこともできます。

たとえば、ユーザー情報を取得するストアド プロシージャを作成します。

CREATE PROCEDURE `get_user_info`(user_id INT)
BEGIN
    SELECT * FROM `user` WHERE `user_id` = user_id;
END

ストアド プロシージャの SQL ステートメント ブロックでは、MySQL でサポートされるすべての SQL ステートメント (SELECT、 INSERT、UPDATE、DELETE など。IF、WHILE、LOOP などの制御フロー ステートメントを使用して、より複雑なデータ ロジック処理を実現することもできます。

2. ストアド プロシージャを呼び出す

ストアド プロシージャを作成した後、CALL ステートメントを通じてストアド プロシージャを呼び出し、それにパラメータを渡すことができます。次の方法で上記で定義した

get_user_info

ストアド プロシージャを呼び出します: <pre class='brush:sql;toolbar:false;'>CALL procedure_name(param1, param2, ...)</pre>3. ストアド プロシージャを削除します

時間が経つと、ストアド プロシージャが削除されます。必要に応じて、DROP PROCEDURE ステートメントを使用して削除できます:

CALL `get_user_info`(1);

例:

DROP PROCEDURE `procedure_name`;

4. ストアド プロシージャ インスタンス

完全なストアド プロシージャ インスタンスを見てみましょう。学生のテストのスコアを保存する

score

テーブルがあり、各学生の合計スコアと平均スコアを計算し、合計スコアに従って高い順に並べる必要があるとします。現時点では、ストアド プロシージャを使用して次のことを実現できます。 <pre class='brush:sql;toolbar:false;'>DROP PROCEDURE `get_user_info`;</pre>このストアド プロシージャでは、最初に、使用する必要があるいくつかの変数を定義します。

total_score

は、スコアの合計を表します。 Student、avg_score は特定の生徒の平均点を表し、stu_id は特定の生徒の番号を表し、stu_name は特定の生徒の名前を表します。は一時テーブル tmp_score です。 次に、

DECLARE CURSOR

ステートメントを使用して、学生テーブル内の学生番号をクエリするために使用されるカーソル変数 cursor_stu_id を宣言しました。このループでは、生徒番号に基づいてスコア テーブルをクエリし、生徒の合計スコアと平均スコアを計算し、それらを一時テーブルに保存します。最後に、SELECT ステートメントを使用して一時テーブルをクエリし、合計スコアを高いものから低いものに並べ替え、最後に DROP TABLE ステートメントを使用して一時テーブルを削除します。 最後に、

CALL

ステートメントを使用して、このストアド プロシージャを呼び出すことができます。 <pre class='brush:sql;toolbar:false;'>CREATE PROCEDURE `calc_stu_score`() BEGIN DECLARE `total_score` INT; DECLARE `avg_score` FLOAT; DECLARE `stu_id` INT DEFAULT 0; DECLARE `stu_name` VARCHAR(255); DECLARE `total` INT DEFAULT 0; DECLARE `cursor_stu_id` CURSOR FOR SELECT `stu_id` FROM `score` GROUP BY `stu_id`; DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE; DROP TEMPORARY TABLE IF EXISTS `tmp_score`; CREATE TEMPORARY TABLE `tmp_score` ( `stu_id` INT NOT NULL, `stu_name` VARCHAR(255) NOT NULL, `total_score` INT NOT NULL, `avg_score` FLOAT NOT NULL, PRIMARY KEY (`stu_id`) ); OPEN cursor_stu_id; stu_loop: LOOP FETCH cursor_stu_id INTO stu_id; IF finished = TRUE THEN LEAVE stu_loop; END IF; SELECT `name` INTO stu_name FROM `student` WHERE `stu_id` = stu_id; SELECT SUM(`sorce`), COUNT(*) INTO total_score, total FROM `score` WHERE `stu_id` = stu_id; SET avg_score = total_score / NULLIF(total, 0); INSERT INTO `tmp_score` (`stu_id`, `stu_name`, `total_score`, `avg_score`) VALUES (stu_id, stu_name, total_score, avg_score); END LOOP; CLOSE cursor_stu_id; SELECT * FROM `tmp_score` ORDER BY `total_score` DESC; DROP TEMPORARY TABLE `tmp_score`; END</pre>summary

ストアド プロシージャは、MySQL の非常に強力なツールです。これにより、データベースの運用プロセスが大幅に簡素化され、データベースのパフォーマンスとセキュリティが向上します。実際のアプリケーションでは、ストアド プロシージャを使用して多くの複雑なデータ処理操作を完了し、ビジネス ニーズをより適切に満たし、効率を向上させ、コストを削減できます。

以上がmysqlはストアドプロシージャを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。