通常、リレーショナル データベースを操作する場合、SELECT、INSERT、UPDATE、DELETE などのデータを取得または操作するための個別の構造化照会言語 (SQL) クエリを発行します。 アプリケーションコード内から直接。それらのステートメントは次のように機能します 基になるデータベース テーブルを直接操作します。同じなら ステートメントまたはステートメントのグループが複数のアプリケーション内で使用されている 同じデータベースにアクセスすると、それらは個別に重複することがよくあります。
MySQL は、他の多くのリレーショナル データベース管理システムと同様、 ストアド プロシージャの使用をサポートします。ストアド プロシージャはグループ 1 に役立ちます または複数の SQL ステートメントを共通名で再利用し、カプセル化します。 データベース自体内の共通のビジネス ロジック。このような手順により、 データベースにアクセスして取得するアプリケーションから呼び出されたり、 一貫した方法でデータを操作します。
ストアド プロシージャを使用すると、共通の再利用可能なルーチンを作成できます。 複数のアプリケーションにわたって使用されるタスク、データ検証の提供、 または、制限することでデータ アクセス セキュリティの追加レイヤーを提供します。 データベース ユーザーが基礎となるテーブルに直接アクセスして発行することを禁止します。
このチュートリアルでは、ストアド プロシージャとは何か、およびその方法について学びます。 データを返し、入力と入力の両方を使用する基本的なストアド プロシージャを作成します。 出力パラメータ。
MySQL への接続とサンプル データベースのセットアップ
このセクションでは、MySQL サーバーに接続し、 サンプル データベースを使用すると、このガイドの例に従うことができます。
このガイドでは、架空の車のコレクションを使用します。保管していただきます 現在所有している車のメーカー、モデル、製造年、
SQL データベース システムがリモート サーバーで実行されている場合は、ローカル マシンからサーバーに SSH で接続します。
ssh sammy@your_server_ip
次に、MySQL サーバーを開きます。プロンプト、sammyを MySQL ユーザーの名前に置き換えますaccount:
mysql -u sammy-p
という名前のデータベースを作成しますprocedures:
CREATE DATABASEprocedures;
データベースが正常に作成された場合、次のような出力を受け取りますこれ:
OutputQuery OK, 1 row affected (0.01 sec)
プロシージャ データベースを選択するには、次の USE ステートメントを実行します:
USEprocedures;
次の出力が表示されます:
ssh sammy@your_server_ip
データベースを選択した後、その中にサンプル テーブルを作成できます。テーブル車には、データベース内の車に関する簡略化されたデータが含まれます。次の列が保持されます:
- make: この列には、最大 100 文字の varchar データ型を使用して表現された、各所有車のメーカーが保持されます。
- model: これ列には、最大 100 文字の varchar データ型を使用して表現された車のモデル名が格納されます。
- 年: この列には車のビルドが格納されます。
- 値: この列には、最大 10 桁と小数点以下 2 桁の 10 進データ型を使用して車の値が保存されます。
以下を使用してサンプルテーブルを作成しますコマンド:
mysql -u sammy-p
次の出力が表示されたら、テーブルが作成されています:
CREATE DATABASEprocedures;
その後、次のコマンドを実行してサンプル データを cars テーブルにロードします。次の INSERT INTO 操作を実行しています:
OutputQuery OK, 1 row affected (0.01 sec)
INSERT INTO この操作により、サンプル スポーツ カーが 10 台追加され、そのうち 5 台がテーブルに追加されます。 ポルシェとフェラーリの 5 つのモデル。次の出力は、すべての 5 つの行が追加されました:
ssh sammy@your_server_ip
これで、ガイドの残りの部分に従って、SQL でストアド プロシージャの使用を開始する準備が整いました。
ストアド プロシージャの概要
MySQL および他の多くのリレーショナル データベースのストアド プロシージャ システムは、レイアウトされた 1 つ以上の命令を含む名前付きオブジェクトです。 その後、呼び出されたときにデータベースによってシーケンスで実行されます。で 最も基本的な例では、ストアド プロシージャは一般的なステートメントを以下に保存できます。 再利用可能なルーチン (データベースからデータを取得するなど) よく使われるフィルター。たとえば、次のストアド プロシージャを作成できます。 最後に指定された期間内に注文を行ったオンライン ストアの顧客を取得します 月数。最も複雑なシナリオでは、ストアド プロシージャは次のようなことができます。 ~の複雑なビジネス ロジックを記述する広範なプログラムを表す
ストアド プロシージャ内の一連の命令には、データを返したり操作したりする SELECT クエリや INSERT クエリなどの一般的な SQL ステートメントを含めることができます。さらに、ストアド プロシージャは以下を利用できます。
- ストアド プロシージャに渡されるパラメータ、またはストアド プロシージャを通じて返されるパラメータ。
- プロシージャ コード内で取得したデータを直接処理するための宣言された変数。
- 条件文。 IF 命令や CASE 命令など、特定の条件に応じたストアド プロシージャ コード。
- WHILE、LOOP、REPEAT などのループを使用すると、取得したデータの各行など、コードの一部を複数回実行できます。 set.
- プロシージャにアクセスするデータベース ユーザーにエラー メッセージを返すなどのエラー処理命令。
- 他のストアド関数の呼び出しデータベース内のプロシージャ。
プロシージャがその名前で呼び出されると、データベース エンジンはそのプロシージャを定義どおりに命令ごとに実行します。
データベース ユーザーは、次のことを行うための適切な権限を持っている必要があります。実行する 与えられた手順。この権限要件により、次の層が提供されます。 セキュリティ。ユーザーにアクセスを許可しながらデータベースへの直接アクセスを禁止します。 安全に実行できることが保証されている個々のプロシージャに割り当てられます。
ストアド プロシージャはデータベース サーバー上で直接実行されます。 すべての計算をローカルで実行し、結果を呼び出し側に返します。
プロシージャの動作を変更したい場合は、 データベース内のプロシージャとそれを使用するアプリケーションは、 新しいバージョンが自動的に選択されます。すべてのユーザーがすぐに開始します 新しいプロシージャ コードを調整する必要なく使用できます。
ストアド プロシージャの作成に使用される SQL コードの一般的な構造は次のとおりです。
mysql -u sammy-p
このコード部分の最初と最後の命令は DELIMITER // と DELIMITER ; です。通常、MySQL はセミコロン記号 (;) を使用します。 ステートメントを区切って、ステートメントの開始と終了を示します。もしあなたが MySQL コンソールで複数のステートメントを次のように区切って実行します。 セミコロンを使用すると、別のコマンドとして扱われて実行されます。 独立して、次から次へと。ただし、ストアド プロシージャでは、 連続して実行される複数のコマンドを囲みます。 呼ばれます。これは、MySQL に作成を指示するときに困難を引き起こします。 新しい手順。データベース エンジンはセミコロン記号を検出します。 ストアド プロシージャ本体で、実行を停止する必要があると考えられます。 声明。この状況では、意図されたステートメントは全体です プロシージャ作成コード。プロシージャ内の単一の命令ではありません。
この制限を回避するには、DELIMITER コマンドを使用して区切り文字を ; から一時的に変更します。 to // CREATE PROCEDURE の間 電話。次に、ストアド プロシージャ本体内のすべてのセミコロンが次のようになります。 そのままサーバーに渡されます。すべての手順が完了したら、 区切り文字は ; に戻ります。最後の DELIMITER ;.
新しいプロシージャを作成するコードの中心は、プロシージャの名前が後に続く CREATE PROCEDURE 呼び出しです:procedure_name 例では。プロシージャ名の後には、オプションのリストが続きます。 プロシージャが受け入れるパラメータ。最後の部分は手順です 本文を BEGIN ステートメントと END ステートメントで囲みます。内部にはプロシージャ コードがあり、これには SELECT クエリなどの単一の SQL ステートメントや、より複雑なコードを含めることができます。
END コマンドは、一般的なセミコロンではなく、一時的な区切り文字である // で終わります。
次のセクションでは、単一のクエリを囲むパラメータのない基本的なストアド プロシージャを作成します。
パラメータを使用しないストアド プロシージャの作成パラメータ
このセクションでは、メーカーと価格で降順に並べられた所有車のリストを返す単一の SQL SELECT ステートメントをカプセル化する最初のストアド プロシージャを作成します。
開始方法使用する SELECT ステートメントを実行すると、
ssh sammy@your_server_ip
データベースは次のようになります。車のテーブルから車のリストを返します。最初はメーカー順、次に 1 つのメーカー内で値の降順に並べられます。
mysql -u sammy-p
最も価値のあるフェラーリがリストの先頭にあり、最も価値の低いポルシェが一番下に表示されます。
このクエリは複数のアプリケーションで頻繁に使用されると想定します。 複数のユーザーが使用し、全員が確実に使用できるようにしたいと想定します。 結果を並べ替えるのとまったく同じ方法です。そのためには、 そのステートメントを再利用可能な名前で保存するストアド プロシージャ
このストアド プロシージャを作成するには、次のコード フラグメントを実行します:
CREATE DATABASEprocedures;
前のセクションで説明したように、最初と最後のコマンド (DELIMITER // および DELIMITER ;) は、プロシージャの作成中にセミコロン文字をステートメントの区切り文字として扱うのをやめるように MySQL に指示します。
CREATE PROCEDURE SQL コマンドの後には、プロシージャ名get_all_cars が続きます。これは、プロシージャの動作を最もよく説明するために定義できます。プロシージャ名の後に一対のかっこ () があります。 ここでパラメータを追加できます。この例では、手順は次のとおりです。 パラメータを使用するため、括弧は空です。次に、プロシージャ コード ブロックの開始と終了を定義する BEGIN コマンドと END コマンドの間に、前に使用した SELECT ステートメントがそのまま記述されます。
データベースは成功メッセージで応答します。
ssh sammy@your_server_ip
get_all_carsプロシージャがデータベースに保存され、呼び出されると、保存されたステートメントが次のように実行されます。 is.
保存されたストアド プロシージャを実行するには、CALL SQL コマンドの後にプロシージャ名を指定します。次のように新しく作成したプロシージャを実行してみてください。
mysql -u sammy-p
プロシージャを使用するために必要なのは、プロシージャ名get_all_carsだけです。以前に使用した SELECT ステートメントの一部を手動で入力する必要はなくなりました。データベースには、前に実行した SELECT ステートメントの出力と同じように結果が表示されます。
CREATE DATABASEprocedures;
これで、特定の方法で順序付けされた cars テーブルからすべての car を返す、パラメーターなしのストアド プロシージャが正常に作成されました。 。このプロシージャは複数のアプリケーションで使用できます。
次のセクションでは、 ユーザー入力に応じてプロシージャの動作を変更するパラメータ。
以上がMySQL でストアド プロシージャを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

MySQL非同期マスタースレーブレプリケーションにより、BINLOGを介したデータの同期が可能になり、読み取りパフォーマンスと高可用性が向上します。 1)マスターサーバーレコードはBinlogに変更されます。 2)スレーブサーバーは、I/Oスレッドを介してBINLOGを読み取ります。 3)サーバーSQLスレッドは、BINLOGを適用してデータを同期させます。

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

MySQLのインストールと基本操作には、次のものが含まれます。1。mysqlをダウンロードしてインストールし、ルートユーザーパスワードを設定します。 2。sqlコマンドを使用して、createdatabaseやcreateTableなどのデータベースとテーブルを作成します。 3. CRUD操作を実行し、挿入、選択、更新、コマンドを削除します。 4.パフォーマンスを最適化し、複雑なロジックを実装するためのインデックスとストアドプロシージャを作成します。これらの手順を使用すると、MySQLデータベースをゼロから構築および管理できます。

Innodbbufferpoolは、データとインデックスページをメモリにロードすることにより、MySQLデータベースのパフォーマンスを向上させます。 1)データページは、ディスクI/Oを削減するためにBufferPoolにロードされます。 2)汚れたページは、定期的にディスクにマークされ、リフレッシュされます。 3)LRUアルゴリズム管理データページの排除。 4)読み出しメカニズムは、可能なデータページを事前にロードします。

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

完全なテーブルスキャンは、MySQLでインデックスを使用するよりも速い場合があります。特定のケースには以下が含まれます。1)データボリュームは小さい。 2)クエリが大量のデータを返すとき。 3)インデックス列が高度に選択的でない場合。 4)複雑なクエリの場合。クエリプランを分析し、インデックスを最適化し、オーバーインデックスを回避し、テーブルを定期的にメンテナンスすることにより、実際のアプリケーションで最良の選択をすることができます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1
使いやすく無料のコードエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ホットトピック



