MySQL臨時表與內存表


在MySQL中有三種虛擬表:臨時表、內存表、視圖。下面簡單介紹一下臨時表和內存表的使用。

1、臨時表

MySQL臨時表在我們需要保存一些臨時數據時是非常有用的。臨時表在MySQL 3.23版本中添加。臨時表只在當前連接可見,當關閉連接時,Mysql會自動刪除表並釋放所有空間。如果你使用了其他MySQL客戶端程序連接MySQL數據庫服務器來創建臨時表,那么只有在關閉客戶端程序時才會銷毀臨時表,當然你也可以手動銷毀。

1.1 創建臨時表

在MySQL中創建臨時表使用CREATE TEMPORARY TABLE語句,其語法格式如下:

 

示例:創建臨時表。

 

還可以通過復制表的方式來創建臨時表。

示例:通過復制表的方式來創建臨時表。

 

 1.2 刪除臨時表

默認情況下,當你斷開與數據庫的連接后,臨時表就會自動被銷毀。當然你也可以在當前MySQL會話中手動刪除臨時表。刪除臨時表與刪除普通表的語句是一樣的,使用 DROP TABLE語句。

示例:刪除臨時表。

 

1.3 使用臨時表的注意事項

(1)臨時表只在當前連接可見,當這個連接關閉的時候,會自動drop。比如打開mysql 就是一個連接會話。兩個不同的連接可以使用相同名字的臨時表,兩個表之間不存在什么關系,如果臨時表的名字和已經存在的磁盤表名字一樣,那么臨時表會暫時覆蓋磁盤表。就是說,你select 查詢,只會顯示臨時表里面的,不會顯示磁盤表。

(2)臨時表的存儲引擎:memor,myisam,merge,innodb,臨時表不支持mysql cluster簇。

(3)同一個查詢語句,只能用一次臨時表,就是說不能將表和自己做連接等。

(4)重命名表,不能用rename 可以用alter table代替。

(5)如果超出了臨時表的容量,臨時表會轉換成磁盤表。

(6)show tables語句不會列出臨時表,在information_schema中也不存在臨時表信息,show create table可以查看臨時表。

 

2、內存表

內存表的表結構建立在磁盤里面,數據放在內存里面;

當MySQL斷開當前連接后,臨時表的表結構和表數據都沒了,但內存表的表結構和表數據都存在;

當MySQL服務重啟之后,內存表的數據會丟失,但表結構依舊存。

2.1 創建內存表

創建內存表與創建普通表一樣,使用CREATE TABLE語句,但需要將存儲引擎設置為:ENGINE = MEMORY。其語法格式如下:

 

 示例:創建內存表。

 

 2.2 刪除內存表

刪除內存表與刪除普通表的語句是一樣的,使用 DROP TABLE語句。

示例:刪除內存表。

 

2.3 使用內存表的注意事項

(1)當MySQL服務重啟之后,內存表的數據會丟失,表結構依舊存。

(2)多個session,創建表的名字不能一樣。

(3)一個session創建會話后,對其他session也是可見的。

(4)data目錄下只有tmp_memory.frm,表結構放在磁盤上,數據放在內存中。

(5)可以創建索引,刪除索引,支持唯一索引。

(6)不影響主備,主庫上插入的數據,備庫也可以查到。

(7)show tables 語句可以查看得到表。

(8)內存表不能包含BLOB或者TEXT列。

(9)內存表支持AUTO_INCREMENT列。

 

3、臨時表與內存表區別

 


免責聲明!

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



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