最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中臨時表的基本創(chuàng)建與使用教程

 更新時間:2015年12月09日 12:06:50   作者:crazylaa  
這篇文章主要介紹了MySQL中臨時表的基本創(chuàng)建與使用教程,注意臨時表中數(shù)據(jù)的清空問題,需要的朋友可以參考下

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

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

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

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

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 

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

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

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

定義字段:

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

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

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

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

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

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

只有在當(dāng)前連接情況下, TEMPORARY 表才是可見的。當(dāng)連接關(guān)閉時, TEMPORARY 表被自動取消。這意味著兩個不同的連接可以使用相同的臨時表名稱,同時兩個臨時表不會互相沖突,也不與原有的同名的非臨時表沖突。(原有的表被隱藏,直到臨時表被取消時為止。)必須擁有 CREATE TEMPORARY TABLES 權(quán)限,才能創(chuàng)建臨時表??梢酝ㄟ^指定 ENGINE|TYPE = MEMORY; 來指定創(chuàng)建內(nèi)存臨時表。

如果表已存在,則使用關(guān)鍵詞 IF NOT EXISTS 可以防止發(fā)生錯誤。注意,原有表的結(jié)構(gòu)與 CREATE TABLE 語句中表示的表的結(jié)構(gòu)是否相同,這一點(diǎn)沒有驗(yàn)證。注釋:如果在 CREATE TABLE...SELECT 語句中使用 IF NOT EXISTS ,則不論表是否已存在,由 SELECT 部分選擇的記錄都會被插入。

DROP TEMPORARY TABLE 語句只取消 TEMPORARY 表,語句不會終止正在進(jìn)行中的事務(wù)。在采用連接池的情況下,為防止多次 CREATE 、 DROP TEMPORARY TABLE 帶來的性能瓶頸,可以使用 CREATE IF NOT EXISTS + TRUNCATE TABLE 的方式來提升性能。

臨時表支持主鍵、索引指定。在連接非臨時表查詢可以利用指定主鍵或索引來提升性能。

CREATE PROCEDURE sp_test_tt(IN i_chars VARCHAR(50),OUT o_counts BIGINT)
BEGIN
     create temporary table if not exists tmpTable – 不存在則創(chuàng)建臨時表
     (
      objChk varchar(255) primary key,
      ModelName varchar(50),
      Operator varchar(500),
      PModelName varchar(50)
     );
     truncate TABLE tmpTable; -- 使用前先清空臨時表。
 
     insert into tmpTable values(i_chars,i_chars,i_chars,i_chars);
     insert into tmpTable values(i_chars,i_chars,i_chars,i_chars); -- 語句1
     select * from tmpTable; -- 語句2
     select count(*) into o_counts from tmpTable; -- 語句3
END;

上述代碼語句 1 返回臨時表中所有數(shù)據(jù),語句 2 將總記錄數(shù)寫入輸出參數(shù)。 truncate 語句放在 create 之后,而不是整個存儲過程最后,原因在于隨后的語句 1 插入同樣的值,二臨時表 PK 校驗(yàn)將產(chǎn)生一個錯誤,則存儲過程最終異常結(jié)束。綜合異常處理,可以如下修改,以在每次存儲過程調(diào)用完畢后清除臨時表。
再來看一個例子:

CREATE PROCEDURE sp_test_tt(IN i_chars VARCHAR(50),OUT o_counts BIGINT)
BEGIN
     create temporary table if not exists tmpTable
     (
      objChk varchar(255) primary key,
      ModelName varchar(50),
      Operator varchar(500),
      PModelName varchar(50)
     ) ENGINE = MEMORY;
     begin
          declare exit handler for sqlwarning,NOT FOUND,SQLEXCEPTION set o_counts=-1;
          insert into tmpTable values(i_chars,i_chars,i_chars,i_chars);
          select * from tmpTable; -- 語句1
          select count(*) into o_counts from tmpTable;
     end;
     truncate TABLE tmpTable; -- 語句2
END;

雖然上述代碼語句 2 最后 truncate table 清空了全部臨時表數(shù)據(jù),但前面語句 1 select 的數(shù)據(jù)結(jié)果集不會被清除。已通過 java 程序驗(yàn)證。

臨時表可以解決二維數(shù)組輸出的問題。但是,大批量的數(shù)據(jù)插入只能由程序采用循環(huán)來做。某些特殊情況下的輸入數(shù)組,例如選擇好的一組待刪除數(shù)據(jù)的 ID 的輸入,也只能利用循環(huán)來做。臨時表也不適用于需要三維數(shù)組的情況。

相關(guān)文章

  • 使用MySQL的geometry類型處理經(jīng)緯度距離問題的方法

    使用MySQL的geometry類型處理經(jīng)緯度距離問題的方法

    這篇文章主要介紹了使用MySQL的geometry類型處理經(jīng)緯度距離問題的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • sql面試題(查看數(shù)據(jù)中指定幾行記錄)

    sql面試題(查看數(shù)據(jù)中指定幾行記錄)

    一個不錯的sql面試題,表 table1,主鍵為 ID,ID為自動編號(ID可能不連續(xù)),要求查詢第31-40行記錄,如何實(shí)現(xiàn)呢?感興趣的朋友參考下
    2014-05-05
  • 深入理解Mysql事務(wù)隔離級別與鎖機(jī)制問題

    深入理解Mysql事務(wù)隔離級別與鎖機(jī)制問題

    MySQL默認(rèn)的事務(wù)隔離級別是可重復(fù)讀,用Spring開發(fā)程序時,如果不設(shè)置隔離級別默認(rèn)用MySQL設(shè)置的隔離級別,如果Spring設(shè)置了就用已設(shè)置的隔離級別,本文重點(diǎn)給大家介紹Mysql事務(wù)隔離級別與鎖機(jī)制的相關(guān)知識,一起看看吧
    2021-09-09
  • MySQL中禁止修改數(shù)據(jù)庫表特定列的實(shí)現(xiàn)

    MySQL中禁止修改數(shù)據(jù)庫表特定列的實(shí)現(xiàn)

    本文主要介紹了MySQL數(shù)據(jù)庫中使用觸發(fā)器禁止修改特定列,以保護(hù)數(shù)據(jù)的一致性和完整性,下面就來介紹一下,感興趣的可以了解一下
    2024-12-12
  • mysql出現(xiàn)“Incorrect key file for table”處理方法

    mysql出現(xiàn)“Incorrect key file for table”處理方法

    今天在恢復(fù)一個客戶數(shù)據(jù)的時候。發(fā)現(xiàn)了一貫問題。有多個表損壞了。因?yàn)槎际侵苯影驯韽?fù)制進(jìn)去的。然后就出現(xiàn)了這個問題問題
    2013-07-07
  • Linux安裝MySQL的教程

    Linux安裝MySQL的教程

    這篇文章主要介紹了Linux安裝MySQL的教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • MySQl 索引的使用

    MySQl 索引的使用

    本文介紹了如何驗(yàn)證索引效率,包括在未建立索引和建立索引前后的耗時對比,詳細(xì)解釋了最左前綴法則、范圍查詢、索引列運(yùn)算、字符串不加引號、模糊匹配、or連接的條件和數(shù)據(jù)分布對索引使用的影響,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Mysql實(shí)現(xiàn)簡易版搜索引擎的示例代碼

    Mysql實(shí)現(xiàn)簡易版搜索引擎的示例代碼

    前段時間,因?yàn)轫?xiàng)目需求,需要根據(jù)關(guān)鍵詞搜索聊天記錄,所以本文實(shí)現(xiàn)了Mysql實(shí)現(xiàn)簡易版搜索引擎,具有一定的參考價值,感興趣的可以了解一下
    2021-08-08
  • MySQL 8.0 之不可見列的基本操作

    MySQL 8.0 之不可見列的基本操作

    MySQL8.0.23之后引入了不可見列,今天我們來說說這個特性的基本使用,感興趣的朋友可以了解下
    2021-05-05
  • CentOS?7/8/9上安裝?MySQL?8.0+的方法完整指南

    CentOS?7/8/9上安裝?MySQL?8.0+的方法完整指南

    本文提供兩種在?CentOS?7/8/9?系統(tǒng)上安裝?MySQL?8.0?或更高版本的官方推薦方法,即使用?Yum?包管理器(適合新手)?和?手動部署通用二進(jìn)制包(適合高級用戶),大家可以根據(jù)需要進(jìn)行選擇
    2025-11-11

最新評論

上饶县| 耿马| 辽阳县| 涿州市| 博白县| 岳池县| 应城市| 崇左市| 碌曲县| 剑川县| 城固县| 崇州市| 邓州市| 舒兰市| 平果县| 西贡区| 常德市| 本溪市| 屏边| 新郑市| 靖江市| 孟津县| 安康市| 攀枝花市| 海阳市| 阳泉市| 广汉市| 越西县| 眉山市| 梓潼县| 汕头市| 罗山县| 罗江县| 栾川县| 宁都县| 中阳县| 黄龙县| 富蕴县| 和平区| 新津县| 托克托县|