MySQL 一時テーブルの簡単な使用法

MySQL 一時テーブルの簡単な使用法

MySQL 一時テーブルは、一時的なデータを保存する必要がある場合に非常に便利です。一時テーブルは現在の接続でのみ表示されます。接続が閉じられると、MySQL は自動的にテーブルを削除し、すべてのスペースを解放します。

一時テーブルは MySQL バージョン 3.23 で追加されました。MySQL バージョンが 3.23 より前の場合、MySQL 一時テーブルは使用できません。しかし、今日では、このような低いバージョンの MySQL データベース サービスを使用している人はほとんどいません。

MySQL 一時テーブルは現在の接続にのみ表示されます。PHP スクリプトを使用して MySQL 一時テーブルを作成すると、PHP スクリプトが実行されるたびに一時テーブルは自動的に破棄されます。

他の MySQL クライアント プログラムを使用して MySQL データベース サーバーに接続し、一時テーブルを作成すると、クライアント プログラムを閉じたときにのみ一時テーブルが破棄されます。 もちろん、手動で破棄することもできます。

以下は、MySQL 一時テーブルを使用する簡単な例を示しています。次の SQL コードは、PHP スクリプトの mysql_query() 関数に適用できます。

mysql> 一時テーブル SalesSummary を作成します (
  -> product_name VARCHAR(50) NOT NULL
  -> 、total_sales DECIMAL(12,2) NOT NULL デフォルト 0.00
  -> 、平均単価 DECIMAL(7,2) NOT NULL デフォルト 0.00
  -> 、total_units_sold INT UNSIGNED NOT NULL デフォルト 0
);
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> SalesSummaryにINSERT
  -> (商品名、総売上、平均単価、総販売数)
  -> 価値観
  -> ('キュウリ', 100.25, 90, 2);

mysql> SalesSummary から * を選択;
+--------------+-------------+----------------+------------------+
| 商品名 | 総売上 | 平均単価 | 総販売数 |
+--------------+-------------+----------------+------------------+
| キュウリ | 100.25 | 90.00 | 2 |
+--------------+-------------+----------------+------------------+
セット内の 1 行 (0.00 秒)

SHOW TABLES コマンドを使用してテーブルのリストを表示すると、SalesSummary テーブルは表示されません。

現在の MySQL セッションを終了し、SELECT コマンドを使用して元々作成された一時テーブル データを読み取ると、終了時に一時テーブルが破棄されているため、データベースにテーブルが存在しないことがわかります。

MySQL 一時テーブルの削除

デフォルトでは、データベースから切断すると一時テーブルは自動的に破棄されます。もちろん、現在の MySQL セッションで DROP TABLE コマンドを使用して、一時テーブルを手動で削除することもできます。

以下は、一時テーブルを手動で削除する例です。

mysql> 一時テーブル SalesSummary を作成します (
  -> product_name VARCHAR(50) NOT NULL
  -> 、total_sales DECIMAL(12,2) NOT NULL デフォルト 0.00
  -> 、平均単価 DECIMAL(7,2) NOT NULL デフォルト 0.00
  -> 、total_units_sold INT UNSIGNED NOT NULL デフォルト 0
);
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> SalesSummaryにINSERT
  -> (商品名、総売上、平均単価、総販売数)
  -> 価値観
  -> ('キュウリ', 100.25, 90, 2);

mysql> SalesSummary から * を選択;
+--------------+-------------+----------------+------------------+
| 商品名 | 総売上 | 平均単価 | 総販売数 |
+--------------+-------------+----------------+------------------+
| キュウリ | 100.25 | 90.00 | 2 |
+--------------+-------------+----------------+------------------+
セット内の 1 行 (0.00 秒)
mysql> SalesSummary テーブルを削除します。
mysql> SalesSummary から * を選択;
エラー 1146: テーブル 'RUNOOB.SalesSummary' が存在しません

クエリを使用して一時テーブルを直接作成する方法:

CREATE TEMPORARY TABLE 一時テーブル名 AS
(
  SELECT * FROM 古いテーブル名 LIMIT 0,10000
);

追加の

非常に大きなテーブルで作業する場合、大量のデータの小さなサブセットを取得するために、多数のクエリを実行する必要がある場合があります。テーブル全体に対してこれらのクエリを実行するのではなく、MySQL で一度にいくつかの必要なレコードを検索し、そのレコードを一時テーブルに選択して、それらのテーブルに対してクエリを実行する方が高速な場合があります。

一時テーブルの作成は簡単です。通常の CREATE TABLE ステートメントに TEMPORARY キーワードを追加します。

一時テーブル tmp_table を作成します (
  名前 VARCHAR(10) NOT NULL,
  値 INTEGER NOT NULL
 )

一時テーブルは、MySQL への接続期間中存在します。切断すると、MySQL は自動的にテーブルを削除し、使用されていたスペースを解放します。もちろん、接続したままテーブルを落としてスペースを空けることもできます。

tmp_tableテーブルを削除する

tmp_table という名前の一時テーブルを作成するときに、データベース内に tmp_table という名前のテーブルがすでに存在する場合、一時テーブルは必然的に非一時テーブル tmp_table をマスク (非表示) します。

一時テーブルを HEAP テーブルとして宣言する場合、MySQL では、メモリ内に作成するように指定することもできます。

一時テーブル tmp_table を作成します ( 
  名前 VARCHAR(10) NOT NULL,
  値 INTEGER NOT NULL
 ) タイプ = ヒープ

HEAP テーブルはメモリに格納されるため、HEAP テーブルに対して実行するクエリは、ディスク上の一時テーブルに対して実行するクエリよりも高速になる可能性があります。ただし、HEAP テーブルは通常のテーブルとは多少異なり、独自の制限があります。詳細については、MySQL リファレンス マニュアルを参照してください。

前述のように、一時テーブルをテストして、大規模なデータベースに対してクエリを実行するよりも実際に高速かどうかを確認する必要があります。データが適切にインデックスされている場合、一時テーブルはまったく高速化されない可能性があります。

1. 一時テーブルが MySQL から切断されると、システムは一時テーブル内のデータを自動的に削除しますが、これは次のステートメントによって作成されたテーブルに限定されます。
フィールドを定義します。

一時テーブル tmp_table を作成します (
  名前 VARCHAR(10) NOT NULL,
  値 INTEGER NOT NULL
 )

2) クエリ結果を一時テーブルに直接インポートする

一時テーブル tmp_table を作成します。SELECT * FROM table_name

2. さらに、MySQL ではメモリ内に直接一時テーブルを作成することもできます。メモリ内にあるため、速度が非常に速くなります。構文は次のとおりです。

一時テーブル tmp_table を作成します (
  名前 VARCHAR(10) NOT NULL,
  値 INTEGER NOT NULL
 ) タイプ = ヒープ

3. 上記の分析から、一時テーブルのデータがクリアされることがわかります。切断すると自動的にクリアされます。ただし、SQL ステートメントを発行するたびにプログラムがデータベースに接続することは不可能です (この場合、心配している問題が発生します。そうでない場合は問題はありません)。データベース接続が切断された場合にのみデータがクリアされるためです。データベース接続で複数の SQL ステートメントを発行すると、システムは一時テーブル データを自動的にクリアしません。

以下もご興味があるかもしれません:
  • Mysql の一時テーブルとパーティションテーブルの違いの詳細な説明
  • Mysql一時テーブルの原理と作成方法の分析
  • mysql 一時テーブルの使用状況の分析 [クエリ結果は一時テーブルに保存できます]
  • MySQL 5.7 の一時テーブルスペースを使用して落とし穴を回避する方法
  • MySQL FAQ シリーズ: 一時テーブルを使用する場合
  • JDBC および MySQL 一時テーブルスペースの詳細な分析
  • MySQL における単一テーブルと複数テーブル、およびビューと一時テーブルに対する Update と Select の違い
  • MySQL の 2 種類の一時テーブルの使用方法の詳細な説明
  • MySQL の一時テーブルと派生テーブルについての簡単な説明
  • MySQL の一時テーブルの基本作成と使用のチュートリアル
  • MySQL の一時テーブルの基本的な使用方法
  • 一時テーブルを使用して MySQL クエリを高速化する方法
  • MySQL での一時テーブルの使用例

<<:  Vue Element フロントエンドアプリケーション開発 テーブルリスト表示

>>:  LinuxにNginxをインストールする正しい手順

推薦する

Xshell を使用して VMware 上の Linux 仮想マシンに接続する (グラフィック手順)

はじめに: 最近 Hadoop プラットフォームの構築を勉強し始めたので、ローカルマシンに VMwa...

シリアルポート使用時のvue-electronの問題解決

エラーは次のとおりです:キャッチされない TypeError: 未定義のプロパティ 'mod...

CSS フロントエンドの知識ポイントのまとめ(必読)

1. CSS の概念: (カスケーディング スタイル シート)利点: 1. コンテンツとプレゼンテ...

MySQL 接続数を設定する方法 (接続数が多すぎる)

mysql使用中に接続数が超過していることが判明しました~~~~ [root@linux-node...

WeChatアプレットを使用して天井効果を実現する方法の例

目次1. 実装2. 問題点3. より良い実装方法があるかどうか検討する要約する背景は日付のタイトルで...

HTML_PowerNode Java アカデミーでテーブルを動的に追加する

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <html> <...

航空機戦争ゲームを実装するためのJavaScript

この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...

CentOS 7.x dockerはoverlay2ストレージ方式を使用する

/etc/docker/daemon.json を編集し、以下を追加します。 { "ストレ...

Linuxテキスト処理ツールの詳細な説明

1. /etc/passwdファイル内のデフォルトシェルが/sbin/nologinではないユーザー...

MySQL の order by ステートメントの最適化方法の詳細な説明

この記事では、ORDER BY文の最適化について学びます。その前に、インデックスの基礎的な理解が必要...

Windows で mysql5.7.21 をインストールするための詳細なチュートリアル

この記事では、参考までにMySQL 5.7.21のインストールチュートリアルを紹介します。具体的な内...

js を使用して 2 つの HTML ウィンドウ間で通信する方法

シナリオ: ページAがページBを開くと、ページBで操作した後、ページAは変更されたデータを同期する必...

jsはウォーターフォールフローのボトムアウトによるデータの動的ロードを実現します

この記事では、ウォーターフォールフローが底に達したときにデータを動的にロードするためのjsの具体的な...

MySQL は、元のデータと同じデータがある場合、更新ステートメントを再度実行しますか?

背景この記事では主に、MySQL が更新ステートメントを実行するときに、元のデータと同一の (つまり...