検索
ホームページデータベースmysql チュートリアルmysqlストアドプロシージャの作成

MySQL ストアド プロシージャは、将来の実行のために定義して MySQL データベースに保存できる、プリコンパイルされたコード ブロックです。入力パラメーターを受け入れて結果を返すことができ、ストアド プロシージャを使用して多くの複雑な操作を作成できます。ストアド プロシージャを使用すると、データベースのパフォーマンスが向上し、コードの重複を減らすことができます。

この記事では、ストアド プロシージャの構文、入力パラメータと戻り結果の定義方法、ストアド プロシージャの呼び出し方法など、MySQL を使用してストアド プロシージャを作成する方法を紹介します。開始する前に、MySQL データベースに接続していることを確認してください。

基本的なストアド プロシージャを作成する

MySQL のストアド プロシージャは、デフォルトの区切り文字がストアド プロシージャ ステートメントの終了記号と同じ「;」であるため、DELIMITER を使用してカスタム区切り文字を設定します。次の構文を使用して、基本的なストアド プロシージャを作成できます。

DELIMITER $$
CREATE PROCEDURE procedure_name()
BEGIN
    -- 存储过程代码
END $$
DELIMITER ;

ストアド プロシージャの名前を定義し、BEGIN キーワードと END キーワードを使用してコード ブロックを定義します。新しい MySQL バージョンでは、次に示すように、BEGIN と END 以外の構文を使用してストアド プロシージャを定義することもできます。

CREATE PROCEDURE procedure_name()
    COMMENT '存储过程描述'
    LANGUAGE SQL
    [NOT] DETERMINISTIC
    [CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA]
    SQL SECURITY INVOKER
    COMMENT '存储过程描述'
BEGIN
    -- 存储过程代码
END;

この構文では、オプションで SQL SECURITY などの属性を追加して指定できます。ストアド プロシージャのセキュリティ。

ここで、パラメーターを受け取り、そのパラメーターの 2 乗を返す単純なストアド プロシージャを作成しましょう。それを「正方形」と名付けましょう。

DELIMITER $$
CREATE PROCEDURE square(IN num INT)
BEGIN
    SELECT num * num;
END $$
DELIMITER ;

IN キーワードを使用して入力パラメータを定義します。ストアド プロシージャでは、SELECT ステートメントを使用してそのパラメーターを単純に乗算し、結果を返します。

ストアド プロシージャの呼び出し

ストアド プロシージャを呼び出すには、CALL ステートメントの後にストアド プロシージャの名前とパラメータを指定します。次の構文を使用して、作成したばかりの「square」ストアド プロシージャを呼び出してみましょう。

CALL square(5);

これは 25 を返します。ストアド プロシージャがどのように機能するかをよりよく理解するために、ストアド プロシージャを通常のクエリと比較できます。

SELECT 5 * 5;

これも 25 を返します。ご覧のとおり、ストアド プロシージャと通常のクエリを使用しても同じ結果が得られますが、ストアド プロシージャには、前述したように、高速なクエリや再利用可能なコード ブロックなど、より多くの利点があります。

制御フロー ステートメント

ストアド プロシージャには、IF ステートメント、CASE ステートメント、ループ ステートメントなどのさまざまな制御フロー ステートメントが含まれています。ここではいくつかの例を示します。

IF ステートメント

IF ステートメントは、条件に基づいてコード ブロックをいつ実行するかを決定します。単純な IF ステートメントの例を次に示します。

DELIMITER $$
CREATE PROCEDURE even_or_odd(IN num INT)
BEGIN
    IF num % 2 = 0 THEN
        SELECT 'even';
    ELSE
        SELECT 'odd';
    END IF;
END $$
DELIMITER ;

この例では、数値を受け取り、その数値が偶数か奇数かに基づいて文字列を返すストアド プロシージャを作成しました。数値が 2 で割り切れる場合は「偶数」を返し、それ以外の場合は「奇数」を返します。

CASE ステートメント

CASE ステートメントは IF ステートメントに似ていますが、より多くの条件に基づいてさまざまなコード ブロックを実行できます。簡単な CASE ステートメントの例を次に示します。

DELIMITER $$
CREATE PROCEDURE grade(IN score INT)
BEGIN
    CASE 
        WHEN score >= 90 THEN SELECT 'A';
        WHEN score >= 80 THEN SELECT 'B';
        WHEN score >= 70 THEN SELECT 'C';
        WHEN score >= 60 THEN SELECT 'D';
        ELSE SELECT 'F';
    END CASE;
END $$
DELIMITER ;

この例では、スコアを受け取り、そのスコアに基づいてレター グレードを返すストアド プロシージャを作成します。スコアが90点以上の場合はAグレード、80点と70点の場合はそれぞれBグレードとCグレード、60点以下の場合はDグレード、それ以外の場合はFグレードが割り当てられます。 。

WHILE ループ

WHILE ループは、コードのブロックを繰り返し実行するループの一種です。これは、条件が満たされる限りコードの実行を続ける条件に基づいています。簡単な WHILE ループの例を次に示します。

DELIMITER $$
CREATE PROCEDURE count_down(IN num INT)
BEGIN
    WHILE num > 0 DO
        SELECT num;
        SET num = num - 1;
    END WHILE;
END $$
DELIMITER ;

この例では、数値を受け取り、その数値からカウントダウンして各数値を結果セットに出力するストアド プロシージャを作成しました。カウントダウンするには、WHILE ループを使用し、数値が 0 より大きい限り、それを出力し、num の値をデクリメントします。

結論

MySQL ストアド プロシージャは、データベースのパフォーマンスを大幅に向上させ、コードを簡素化できる強力なツールです。この記事では、MySQL を使用してストアド プロシージャを作成する方法、入力パラメータを定義して結果を返す方法について説明し、さまざまな制御フロー ステートメントの例を示します。ストアド プロシージャは強力ですが、アクセスが適切に制御され、データが保護されるようにセキュリティに注意を払うことが重要です。

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLで利用可能なさまざまなストレージエンジンは何ですか?MySQLで利用可能なさまざまなストレージエンジンは何ですか?Apr 26, 2025 am 12:27 AM

mysqloffersvariousstorageEngines、それぞれのfordifferentusecases:1)Innodbisidealforapplicationsingingidcomplianceanceandhighconcurrency、support transactions andforeignkeys.2)myisamisbestforread-havyworkloads、transactionsupptort.3)

MySQLの一般的なセキュリティの脆弱性は何ですか?MySQLの一般的なセキュリティの脆弱性は何ですか?Apr 26, 2025 am 12:27 AM

MySQLの一般的なセキュリティの脆弱性には、SQLインジェクション、弱いパスワード、不適切な許可構成、および非合事ソフトウェアが含まれます。 1。SQL注射は、前処理ステートメントを使用することで防ぐことができます。 2。強力なパスワード戦略を強制的に使用することにより、弱いパスワードを回避できます。 3.不適切な許可構成は、ユーザー許可の定期的なレビューと調整を通じて解決できます。 4.未使用のソフトウェアは、MySQLバージョンを定期的にチェックして更新することでパッチを適用できます。

MySQLでスロークエリをどのように識別できますか?MySQLでスロークエリをどのように識別できますか?Apr 26, 2025 am 12:15 AM

MySQLの遅いクエリを識別することは、遅いクエリログを有効にし、しきい値を設定することで実現できます。 1.スロークエリログを有効にし、しきい値を設定します。 2.スロークエリログファイルを表示および分析し、詳細な分析のためにMySQLDumpSlowやPT-Query-Digestなどのツールを使用します。 3.インデックスの最適化、クエリの書き換え、およびselect*の使用を回避することで、遅いクエリの最適化を実現できます。

MySQLサーバーの健康とパフォーマンスをどのように監視できますか?MySQLサーバーの健康とパフォーマンスをどのように監視できますか?Apr 26, 2025 am 12:15 AM

MySQLサーバーの健康とパフォーマンスを監視するには、システムの健康、パフォーマンスメトリック、クエリの実行に注意する必要があります。 1)システムの健康を監視する:Top、HTOP、またはShowGlobalStatusコマンドを使用して、CPU、メモリ、ディスクI/O、ネットワークアクティビティを表示します。 2)パフォーマンスインジケーターの追跡:クエリ番号あたりのクエリ番号、平均クエリ時間、キャッシュヒット率などのキーインジケーターを監視します。 3)クエリ実行の最適化を確保します:スロークエリログを有効にし、実行時間が設定されたしきい値を超えるクエリを記録し、最適化します。

mysqlとmariadbを比較対照します。mysqlとmariadbを比較対照します。Apr 26, 2025 am 12:08 AM

MySQLとMariaDBの主な違いは、パフォーマンス、機能、ライセンスです。1。MySQLはOracleによって開発され、Mariadbはフォークです。 2. Mariadbは、高負荷環境でパフォーマンスを向上させる可能性があります。 3.MariaDBは、より多くのストレージエンジンと機能を提供します。 4.MySQLは二重ライセンスを採用し、MariaDBは完全にオープンソースです。既存のインフラストラクチャ、パフォーマンス要件、機能要件、およびライセンスコストを選択する際に考慮する必要があります。

MySQLのライセンスは、他のデータベースシステムと比較してどうですか?MySQLのライセンスは、他のデータベースシステムと比較してどうですか?Apr 25, 2025 am 12:26 AM

MySQLはGPLライセンスを使用します。 1)GPLライセンスにより、MySQLの無料使用、変更、分布が可能になりますが、変更された分布はGPLに準拠する必要があります。 2)商業ライセンスは、公的な変更を回避でき、機密性を必要とする商用アプリケーションに適しています。

MyisamよりもInnodbを選びますか?MyisamよりもInnodbを選びますか?Apr 25, 2025 am 12:22 AM

Myisamの代わりにInnoDBを選択する場合の状況には、次のものが含まれます。1)トランザクションサポート、2)高い並行性環境、3)高いデータの一貫性。逆に、Myisamを選択する際の状況には、1)主に操作を読む、2)トランザクションサポートは必要ありません。 INNODBは、eコマースプラットフォームなどの高いデータの一貫性とトランザクション処理を必要とするアプリケーションに適していますが、Myisamはブログシステムなどの読み取り集約型およびトランザクションのないアプリケーションに適しています。

MySQLの外国キーの目的を説明してください。MySQLの外国キーの目的を説明してください。Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール