MySql 臨時表


今天在項目中遇到一個,當mysql的in語句中數據量很大時,建立一個臨時表的例子。於是樓主整理了一下關於臨時表的知識,與大家分享一下~

首先,臨時表只在當前連接可見,當關閉連接時,Mysql會自動刪除表並釋放所有空間。因此在不同的連接中可以創建同名的臨時表,並且操作屬於本連接的臨時表。

建立臨時表:

  CREATE TEMPORARY  TABLE temp_table (

    id VARCHAR(32) NOT NULL,

    NAME VARCHAR(100)

  ) ENGINE = MEMORY

  注意最后面的ENGINE = MEMORY,其中ENGINE是數據庫搜索引擎,常用的幾種類型為MyISAM, MEMORY, InnoDB

    1)MyISAM 管理非事物表。提供高速存儲和檢索,以及全文搜索能力

    2)MEMORY存儲引擎提供“內存中”表。就像MyISAM一樣,MEMORY和MERGE存儲引擎處理非事務表

      注釋:MEMORY存儲引擎正式地被確定為HEAP引擎。

    3)InnoDB和存儲引擎提供事務安全表。這是默認的數據庫表存儲引擎

 

當然還有一種簡單粗暴的方式建立臨時表,直接將查詢結果導入到臨時表:

  CREATE TEMPORARY  TABLE temp_table

  ENGINE = MEMORY

  SELECT * FROM `bm_sc_settlement`

 

  創建臨時表后,我們插入數據

  INSERT INTO temp_table VALUES('1', 'a');
  INSERT INTO temp_table VALUES('2', 'b');
  INSERT INTO temp_table VALUES('3', 'c');
  INSERT INTO temp_table VALUES('4', 'd');
  INSERT INTO temp_table VALUES('5', 'e');

    查詢:

       SELECT * FROM temp_table;

   

   可以看到我們插入的結果已經放到臨時表中(也可以做更新及刪除操作)

   此時當我們關掉mysql客戶端(樓主用的SQLyog),然后重新打開。執行查詢臨時表操作,會提示找不到該臨時表

 

刪除臨時表:

    DROP TEMPORARY TABLE IF EXISTS temp_table;

 

臨時表使用有一些限制條件

    1)在同一個query語句中,相同的臨時表只能出現一次。如:

      SELECT * FROM temp_table a ,temp_table b;

          錯誤信息:ERROR 1137 (HY000): Can't reopen table: 'temp_table'

         同樣相同臨時表不能在存儲函數中出現多次,如果在一個存儲函數里,用不同的別名查找一個臨時表多次,或者在這個存儲函數里用不同的語句查找,都會出現這個錯誤。

 2) 不同的臨時表可以出現在同一個query語句中,如臨時表temp_tb1, temp_tb2:

     select * from temp_tb1, temp_tb2;

 3)可以復制臨時表得到一個新的臨時表,如:

     create temporary table new_table select * from old_table;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM