欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL臨時表的簡單用法介紹

 更新時間:2021年01月24日 10:38:48   作者:奮斗吧_攻城獅  
這篇文章給大家簡單介紹了MySQL臨時表的簡單用法,對此有需要的朋友可以跟著學習操作下。

MySQL 臨時表在我們需要保存一些臨時數(shù)據(jù)時是非常有用的。臨時表只在當前連接可見,當關(guān)閉連接時,Mysql會自動刪除表并釋放所有空間。

臨時表在MySQL 3.23版本中添加,如果你的MySQL版本低于 3.23版本就無法使用MySQL的臨時表。不過現(xiàn)在一般很少有再使用這么低版本的MySQL數(shù)據(jù)庫服務了。

MySQL臨時表只在當前連接可見,如果你使用PHP腳本來創(chuàng)建MySQL臨時表,那每當PHP腳本執(zhí)行完成后,該臨時表也會自動銷毀。

如果你使用了其他MySQL客戶端程序連接MySQL數(shù)據(jù)庫服務器來創(chuàng)建臨時表,那么只有在關(guān)閉客戶端程序時才會銷毀臨時表,當然你也可以手動銷毀。

實例

以下展示了使用MySQL 臨時表的簡單實例,以下的SQL代碼可以適用于PHP腳本的mysql_query()函數(shù)。

mysql> CREATE TEMPORARY TABLE SalesSummary (
  -> product_name VARCHAR(50) NOT NULL
  -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
  -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
  -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
  -> (product_name, total_sales, avg_unit_price, total_units_sold)
  -> VALUES
  -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber   |   100.25 |     90.00 |        2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

當你使用 SHOW TABLES命令顯示數(shù)據(jù)表列表時,你將無法看到 SalesSummary表。

如果你退出當前MySQL會話,再使用 SELECT命令來讀取原先創(chuàng)建的臨時表數(shù)據(jù),那你會發(fā)現(xiàn)數(shù)據(jù)庫中沒有該表的存在,因為在你退出時該臨時表已經(jīng)被銷毀了。

刪除MySQL 臨時表

默認情況下,當你斷開與數(shù)據(jù)庫的連接后,臨時表就會自動被銷毀。當然你也可以在當前MySQL會話使用 DROP TABLE 命令來手動刪除臨時表。

以下是手動刪除臨時表的實例:

mysql> CREATE TEMPORARY TABLE SalesSummary (
  -> product_name VARCHAR(50) NOT NULL
  -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
  -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
  -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
  -> (product_name, total_sales, avg_unit_price, total_units_sold)
  -> VALUES
  -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber   |   100.25 |     90.00 |        2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SalesSummary;
mysql> SELECT * FROM SalesSummary;
ERROR 1146: Table 'RUNOOB.SalesSummary' doesn't exist

用查詢直接創(chuàng)建臨時表的方式:

CREATE TEMPORARY TABLE 臨時表名 AS
(
  SELECT * FROM 舊的表名
  LIMIT 0,10000
);

下面是一些補充

當工作在非常大的表上時,你可能偶爾需要運行很多查詢獲得一個大量數(shù)據(jù)的小的子集,不是對整個表運行這些查詢,而是讓MySQL每次找出所需的少數(shù)記錄,將記錄選擇到一個臨時表可能更快些,然后在這些表運行查詢。

創(chuàng)建臨時表很容易,給正常的CREATE TABLE語句加上TEMPORARY關(guān)鍵字:

CREATE TEMPORARY TABLE tmp_table (
  name VARCHAR(10) NOT NULL,
  value INTEGER NOT NULL
 )

臨時表將在你連接MySQL期間存在。當你斷開時,MySQL將自動刪除表并釋放所用的空間。當然你可以在仍然連接的時候刪除表并釋放空間。

DROP TABLE tmp_table

如果在你創(chuàng)建名為tmp_table臨時表時名為tmp_table的表在數(shù)據(jù)庫中已經(jīng)存在,臨時表將有必要屏蔽(隱藏)非臨時表tmp_table。

如果你聲明臨時表是一個HEAP表,MySQL也允許你指定在內(nèi)存中創(chuàng)建它:

CREATE TEMPORARY TABLE tmp_table ( 
  name VARCHAR(10) NOT NULL,
  value INTEGER NOT NULL
 ) TYPE = HEAP

因為HEAP表存儲在內(nèi)存中,你對它運行的查詢可能比磁盤上的臨時表快些。然而,HEAP表與一般的表有些不同,且有自身的限制。詳見MySQL參考手冊。

正如前面的建議,你應該測試臨時表看看它們是否真的比對大量數(shù)據(jù)庫運行查詢快。如果數(shù)據(jù)很好地索引,臨時表可能一點不快。

1、臨時表再斷開于mysql的連接后系統(tǒng)會自動刪除臨時表中的數(shù)據(jù),但是這只限于用下面語句建立的表:
定義字段:

CREATE TEMPORARY TABLE tmp_table (
  name VARCHAR(10) NOT NULL,
  value INTEGER NOT NULL
 )

2)直接將查詢結(jié)果導入臨時表

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

2、另外mysql也允許你在內(nèi)存中直接創(chuàng)建臨時表,因為是在內(nèi)存中所有速度會很快,語法如下:

CREATE TEMPORARY TABLE tmp_table (
  name VARCHAR(10) NOT NULL,
  value INTEGER NOT NULL
 ) TYPE = HEAP

3、從上面的分析可以看出臨時表的數(shù)據(jù)是會被清空的,你斷開了連接就會被自動清空,但是你程序中不可能每發(fā)行一次sql就連接一次數(shù)據(jù)庫吧(如果是這樣的話,那就會出現(xiàn)你擔心的問題,如果不是就沒有問題),因為只有斷開數(shù)據(jù)庫連接才會被清空數(shù)據(jù),在一個數(shù)據(jù)庫連接里面發(fā)行多次sql的話系統(tǒng)是不會自動清空臨時表數(shù)據(jù)的。

相關(guān)文章

  • MySql8 WITH RECURSIVE遞歸查詢父子集的方法

    MySql8 WITH RECURSIVE遞歸查詢父子集的方法

    這篇文章主要介紹了MySql8 WITH RECURSIVE遞歸查詢父子集的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • mysql 內(nèi)存緩沖池innodb_buffer_pool_sizes大小調(diào)整實現(xiàn)

    mysql 內(nèi)存緩沖池innodb_buffer_pool_sizes大小調(diào)整實現(xiàn)

    innodb_buffer_pool_size是MySQL中InnoDB存儲引擎的一個重要參數(shù),本文主要介紹了mysql 內(nèi)存緩沖池innodb_buffer_pool_sizes大小調(diào)整實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Mysql?8.0?綠色版安裝教程詳解

    Mysql?8.0?綠色版安裝教程詳解

    這篇文章主要為大家詳細介紹了Mysql?8.0?綠色版安裝教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 一文搞懂MySQL持久化和回滾的原理

    一文搞懂MySQL持久化和回滾的原理

    本文主要介紹了MySQL持久化和回滾的原理,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • MySQL中or語句用法示例

    MySQL中or語句用法示例

    這篇文章主要介紹了MySQL中or語句用法示例,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • mysql安裝配置方法圖文教程(CentOS7)

    mysql安裝配置方法圖文教程(CentOS7)

    這篇文章主要為大家詳細介紹了centos7下mysql安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • MySql中流程控制函數(shù)/統(tǒng)計函數(shù)/分組查詢用法解析

    MySql中流程控制函數(shù)/統(tǒng)計函數(shù)/分組查詢用法解析

    這篇文章主要介紹了MySql中流程控制函數(shù)/統(tǒng)計函數(shù)/分組查詢用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 如何查看MySQL數(shù)據(jù)庫中使用的引擎類型

    如何查看MySQL數(shù)據(jù)庫中使用的引擎類型

    MySQL是目前使用最廣泛的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,它支持多種不同的數(shù)據(jù)存儲引擎,以方便地查看MySQL數(shù)據(jù)庫中使用的引擎類型,在實際應用中,選擇合適的存儲引擎類型可以提高數(shù)據(jù)庫的性能和穩(wěn)定性,
    2023-10-10
  • 簡述Mysql Explain 命令

    簡述Mysql Explain 命令

    MySQL的EXPLAIN命令用于SQL語句的查詢執(zhí)行計劃(QEP)。如果你的頁面返回結(jié)果很慢,你就需要使用explain去分析你的sql是否需要優(yōu)化了.接下來通過本文給大家介紹Mysql Explain 命令,感興趣的朋友一起學習吧
    2016-10-10
  • MySQL數(shù)據(jù)庫約束操作示例講解

    MySQL數(shù)據(jù)庫約束操作示例講解

    約束是用來限制表中的數(shù)據(jù)長什么樣子的,即什么樣的數(shù)據(jù)可以插入到表中,什么樣的數(shù)據(jù)插入不到表中,下面這篇文章主要給大家介紹了關(guān)于如何通過一文理解MySQL數(shù)據(jù)庫的約束與表的設(shè)計的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評論