MySQL で準備、実行、割り当て解除ステートメントを使用するチュートリアル

MySQL で準備、実行、割り当て解除ステートメントを使用するチュートリアル

序文

MySQLでは、準備、実行、割り当て解除を正式にはPREPARE STATEMENTと呼びます。私は[準備されたステートメント]と呼ぶことに慣れています。使い方は非常に簡単です。では、早速詳しい紹介を見ていきましょう。

サンプルコード

準備可能な stmt から stmt_name を準備します

stmt_name を実行
 [@var_name [, @var_name] を使用...] -

{DEALLOCATE | DROP} stmt_name を準備する

例えば:

mysql> PREPARE pr1 FROM 'SELECT ?+?';
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
声明文を準備

mysql> @a=1、@b=10 を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> @a、@b を使用して pr1 を実行します。
+------+
| ?+? |
+------+
| 11 |
+------+
セット内の 1 行 (0.00 秒)

mysql> EXECUTE pr1 USING 1, 2; -- ユーザー変数のみを渡すことができます。
エラー1064(42000):SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルを確認してください。 
1行目の「1, 2」付近で使用する正しい構文

mysql> PREPARE pr1 の割り当てを解除します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

PAREPARE STATEMENT を使用すると、各 SQL 実行の構文解析を減らすことができます。たとえば、WHERE 条件付きの SELECT および DELETE、または UPDATE、INSERT を実行する場合、その都度変数値を変更するだけで済みます。

SQL インジェクションも防止でき、パラメータ値にエスケープ文字や区切り文字を含めることができます。

アプリケーションまたは SQL スクリプトに適用可能です。

その他の使用法:

同様に、PREPARE ... FROM はユーザー変数に直接接続できます。

mysql> テーブル a (a int);
クエリは正常、影響を受けた行は 0 行 (0.26 秒)

mysql> INSERT INTO a SELECT 1;
クエリは正常、1 行が影響を受けました (0.04 秒)
記録: 1 重複: 0 警告: 0

mysql> INSERT INTO a SELECT 2;
クエリは正常、1 行が影響を受けました (0.04 秒)
記録: 1 重複: 0 警告: 0

mysql> INSERT INTO a SELECT 3;
クエリは正常、1 行が影響を受けました (0.04 秒)
記録: 1 重複: 0 警告: 0

mysql> SET @select_test = CONCAT('SELECT * FROM ', @table_name);
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> SET @テーブル名 = 'a';
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> @select_test から pr2 を準備します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
声明文を準備

mysql> pr2 を実行します。
+------+
| ア |
+------+
| 1 |
| 2 |
| 3 |
+------+
セット内の 3 行 (0.00 秒)

mysql> DROP PREPARE pr2; -- ここで DROP を DEALLOCATE に置き換えることができます
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

EXECUTE ステートメントを完了するたびに、DEALLOCATE PREPARE ... ステートメントを実行して、実行に使用されたすべてのデータベース リソース (カーソルなど) を解放する習慣を身に付けてください。

さらに、セッション内に準備されたステートメントが多すぎる場合、max_prepared_stmt_count の上限に達する可能性があります。

準備されたステートメントは作成者のセッションでのみ使用でき、他のセッションでは使用できません。

さらに、何らかの方法 (正常または異常) でセッションを終了すると、以前に定義した準備済みステートメントは存在しなくなります。

ストアド プロシージャで使用する場合、プロシージャ内で DEALLOCATE が実行されないと、準備されたステートメントはストアド プロシージャの終了後も有効になります。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • Mysqlのprepare前処理の具体的な使用法
  • MySQL の使用法とバグ分析のプロセスを準備する

<<:  nginx proxy_cache バッチキャッシュクリアスクリプトの紹介

>>:  JS を使用して要素がビューポート内にあるかどうかを確認する方法

推薦する

ウェブページ作成のヒントのまとめ

序文この記事は主に、日常の Web ページ制作で遭遇する問題解決スキルの一部をまとめ、皆さんの参考と...

JS はデータ URL をどのように理解するのでしょうか?

目次概要データ URL の使用を開始するデータURL構文複数言語の文字列のBase64エンコードとデ...

標準のMySQL (x64) Windowsバージョンのインストール手順の詳細な説明

MySQL x64 はインストーラーを提供していません、インストーラーを提供していません、インストー...

three.js を使って立体的な矢印線を描く詳細な手順

需要: この需要は緊急に必要です!地下鉄のシーンでは、脱出経路を示す矢印を描かなければなりません。こ...

MySQL 最適化のケーススタディ

1. 背景Youzan の各 OLTP データベース インスタンスには、実行時間が特定のしきい値を超...

MySQL ビッグデータ クエリ最適化エクスペリエンスの共有 (推奨)

本格的な MySQL 最適化! MySQL のデータ量が少ない場合は最適化は不要です。データ量が多い...

MySQL データベース テーブルとデータベース パーティショニング戦略

まず、テーブルを分割する必要がある理由について説明します。データシートが数百万に達すると、1 回のク...

スケジュールされた時間に古いジャンクファイルを自動的に削除する Linux 用の Autotrash ツール

Autotrash は、古い削除済みファイルを消去するプロセスを自動化するコマンド ライン プログラ...

JavaScript における call、apply、bind の実装原則の詳細な説明

目次序文電話使用法成し遂げるシンプルな実装バージョン:アップグレード版:適用する使用法成し遂げるバイ...

Vue.js でフォントを読み込む正しい方法

目次font-faceでフォントを正しく宣言するフォントをプリロードするフォントをホストするにはli...

MySQL の完全バックアップとクイックリカバリ方法

過去 15 日間のデータをバックアップするシンプルな MySQL 完全バックアップ スクリプト。バッ...

VMware WorkStation 14 pro インストール Ubuntu 17.04 チュートリアル

この記事では、VMware Workstation14 ProにUBuntu17.04をインストール...

Vue Element UIの使用時に遭遇した問題をまとめる

目次1. DateTimePickerの日付選択範囲は現在時刻とそれ以前です2. DateTimeP...

Tomcatはスレッドプールを使用してリモート同時リクエストを処理します。

Tomcatが同時リクエストを処理する方法を理解することで、スレッドプール、ロック、キュー、および...

JavaScript でネットワーク速度をテストする方法

目次序文ネットワーク速度のフロントエンド判定原理のまとめ1. img を読み込むか Ajax リクエ...