MySQL は、非常に一般的に使用されるリレーショナル データベース管理システムであり、大量のデータを保存、処理、管理するために使用できます。ストアド プロシージャは MySQL が提供する非常に便利な機能で、一連の SQL ステートメントを再利用可能なコード ブロックにカプセル化することで、SQL ステートメントの実行効率の向上、コードの複雑さの軽減、セキュリティの向上などを実現します。したがって、MySQL ストアド プロシージャの使い方をマスターすることは、データベースの開発と管理の効率を向上させる上で非常に重要です。
1. ストアド プロシージャの概要
ストアド プロシージャは、MySQL で定義されたプリコンパイルされた SQL ステートメントのコレクションです。これらはデータベース サーバーでコンパイルされます。クエリを実行するときは、ストアド プロシージャを呼び出すだけで済みます。 . . SQL ステートメントを単独で実行する場合と比較して、ストアド プロシージャを使用すると、ネットワーク オーバーヘッドが大幅に削減され、データ クエリと処理の効率が向上します。
さらに、ストアド プロシージャには次の重要な機能があります。
2. ストアド プロシージャの構文形式
MySQL でストアド プロシージャを定義するには、CREATE PROCEDURE ステートメントを使用する必要があります。 CREATE PROCEDURE ステートメントの基本的な構文形式は次のとおりです。
CREATE PROCEDURE 存储过程名称(参数列表) BEGIN -- sql语句 END;
このうち、ストアド プロシージャ名は必須であり、パラメータ リストは必要に応じて省略できます。 BEGIN と END の間で、一連の SQL ステートメントを記述して、データのクエリ、書き込み、変更、およびその他の関連操作を実行できます。
次はストアド プロシージャの簡単な例です。ストアド プロシージャにはパラメータが 1 つだけあり、それを変更した後に単にそれを返します:
CREATE PROCEDURE test_proc(IN num INT) BEGIN SET num = num + 1; SELECT num; END;
ストアド プロシージャを実行するとき、ストアド プロシージャは次の方法で呼び出すことができます。 CALL ステートメント:
CALL test_proc(10);
実行結果は 11 です。
3. ストアド プロシージャのパラメータ
ストアド プロシージャでは、IN、OUT、INOUT の 3 種類のパラメータを使用できます。
パラメータを含むストアド プロシージャの例を次に示します。
CREATE PROCEDURE get_user_by_id(IN userid INT, OUT username VARCHAR(50)) BEGIN SELECT username FROM user WHERE id=userid; SET username = CONCAT('Welcome, ', username); END;
このストアド プロシージャを呼び出すときは、userid パラメータを渡し、ユーザー名を受け取る変数を定義する必要があります。出力パラメータ:
DECLARE uname VARCHAR(50); CALL get_user_by_id(1, @uname); SELECT @uname;
4. ストアド プロシージャのフロー制御とループ
ストアド プロシージャは、SQL ステートメントを直接実行するだけでなく、フロー制御ステートメントとループ ステートメントを使用して特定の論理操作を完了することもできます。 MySQL は、次のフロー制御ステートメントをサポートしています:
次は WHILE DO ループの例です。このストアド プロシージャは、ユーザー テーブルの年齢に 1 年を追加します:
CREATE PROCEDURE update_user_age() BEGIN DECLARE i INT DEFAULT 0; DECLARE n INT; SELECT COUNT(*) FROM user INTO n; WHILE i<=n DO UPDATE user SET age=age+1 WHERE id=i; SET i=i+1; END WHILE; END;
このストアド プロシージャを実行するときに必要なのは、
CALL update_user_age();
5. ストアド プロシージャでの例外処理
ストアド プロシージャでエラーが発生した場合、例外処理を使用してプログラムのクラッシュを回避できます。 MySQL では、例外処理は DECLARE ... HANDLER 構文を使用して実装されます。
次は例外処理の例です。ユーザー テーブル レコードを削除するときに、レコードが他のテーブルによって参照されている場合、ストアド プロシージャは例外をスローします。
CREATE PROCEDURE delete_user(IN userid INT) BEGIN DECLARE exit_test CONDITION FOR SQLSTATE '23000'; START TRANSACTION; DELETE FROM user WHERE id=userid; IF ROW_COUNT() = 0 THEN SIGNAL exit_test; END IF; COMMIT; END;
ストアド プロシージャの実行時に例外が発生した場合、それを処理する次のプログラム コードを作成できます:
DECLARE EXIT HANDLER FOR SQLSTATE '23000' -- 处理异常 END;
6. ストアド プロシージャの最適化
ただしストアド プロシージャ SQL クエリの効率を向上させることができますが、ストアド プロシージャの設計が不合理である場合、クエリ効率の低下につながる可能性もあります。ストアド プロシージャの最適化に関する提案を以下に示します。
つまり、ストアド プロシージャは MySQL の非常に重要な機能であり、SQL ステートメントの実行効率を向上させ、コードの複雑さを軽減し、セキュリティを向上させることができます。ストアド プロシージャを使用する場合は、パラメータ、プロセス制御、例外処理などに注意する必要があります。また、ストアド プロシージャを最適化してデータベースのクエリと更新の効率を向上させる方法を考慮する必要もあります。
以上がmysql c ストアド プロシージャの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。