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 を使用して要素がビューポート内にあるかどうかを確認する方法

推薦する

JS ES 新機能テンプレート文字列

目次1. テンプレート文字列とは何ですか? 2. 複数行のテンプレート文字列2.1 式付きテンプレー...

JSONObject の使用方法の詳細な説明

JSONObject は単なるデータ構造であり、JSON 形式のデータ構造 ( key-value構...

MySQL における「:=」と「=」の違いの簡単な分析

=設定および更新の場合にのみ、:= と同じ効果、つまり代入効果があり、それ以外の場合は等号の効果があ...

エラー 1862 (HY000): パスワードの有効期限が切れています。ログインするには、..... を使用してパスワードを変更する必要があります。

エラーメッセージ:エラー 1862 (HY000): パスワードの有効期限が切れています。ログインす...

2015-2016年に主流となるインタラクティブ体験のトレンド

5月の最も重要なインタラクティブデザイン記事!今年、Baiduのデザイナーは体験の観点から出発し、大...

Linux環境でOpenSSL証明書を生成する

1. 環境: CentOS7、OpenSSL1.1.1k。 2. コンセプト:ルート証明書: サーバ...

さまざまなブラウザでのhrタグの説明

通常、人事担当者と会うことはめったにありませんが、一度会うと、それが生死を分けることもあります。 H...

Reactのコンポーネント共同利用実装

目次ネスティング親子コンポーネント通信ブラザーコンポーネント通信撤回するReact の Linked...

MySQL 無料インストール版 (zip) のインストールと設定の詳細なチュートリアル

この記事では、MySQL無料インストール版(zip)のインストールと設定のチュートリアルを参考までに...

mysql5.7.24 バージョンのインストール手順と解凍時に発生した問題の概要

1. ダウンロード参考: 2. D:\MySQL\mysql-5.7.24 などの固定の場所に解凍し...

Reactでaxiosを使用してリクエストを送信する一般的な方法

目次Reactにaxios依存関係をインストールして導入するGETリクエストにaxiosを使用するa...

Linux で Tomcat を実行するいくつかの方法の説明

Linux での Tomcat の起動とシャットダウンLinux システムでは、コマンド操作を使用し...

HTML ブロックレベルタグとインラインタグの違い

1. ブロックレベル要素: 独立して存在できる能力を指します。通常、ブロックレベル要素は改行によって...

Mysql で自動増分主キー ID を更新するときに問題が発生しました

目次自動インクリメント ID を更新する理由は何ですか?質問解決方法これは私が知っている問題ですが、...

Linux のごみ箱メカニズムの実装プロセスと使用方法の詳細な説明

序文: Linux システムでの rm は元に戻せません。コマンドの設計自体に問題はありません。問題...