<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1.在資料庫斷開連線的時候會自動刪除臨時表。
create temporary table IF NOT EXISTS client.getstucou( type_id int )Engine=InnoDB default charset utf8;
注意:在儲存過程中建立了臨時表的情況的話,在外面使用查詢語句是找不到這張表的。
例如:
在儲存過程中的sql語句中才而能找到該表。
2.臨時表插入(select語句查出的資料集合)。INSERT INTO 表名 (查詢到的集合)
例如:UNION ALL(將兩個select語句求並集)
INSERT INTO getstucou WITH TEMP AS ( SELECT * FROM t_shop_type WHERE parent_type_id = @StuNo OR type_id = @StuNo UNION ALL SELECT t.* FROM TEMP, t_shop_type t WHERE TEMP.type_id = t.parent_type_id ) SELECT type_id FROM TEMP;
首先來看看官網給的有關MySQL的臨時表的簡介:
In MySQL, a temporary table is a special type of table that allows you to store a temporary result set, which you can reuse several times in a single session.A temporary table is very handy when it is impossible or expensive to query data that requires a single SELECT statement with the JOIN clauses. In this case, you can use a temporary table to store the immediate result and use another query to process it.
總結而來就是:
當我們需要使用難以接受的或開銷很大的一個SELECT語句和JOIN子句的資料時,臨時表非常方便。
大致同CREATE TABLE語法,建立臨時表則是CREATE TEMPORARY TABLE,增加了TEMPORARY關鍵字表示臨時表。
1.建立
(1)建立不同於現有表的臨時表
CREATE TEMPORARY TABLE table_name( column_1_definition, column_2_definition, ..., table_constraints );
範例:
//首先,建立一個新的臨時表,稱為credits儲存客戶的信用: CREATE TEMPORARY TABLE credits( customerNumber INT PRIMARY KEY, creditLimit DEC(10,2) ); //然後,將customers表中的行插入臨時表中credits: INSERT INTO credits(customerNumber,creditLimit) SELECT customerNumber, creditLimit FROM customers WHERE creditLimit > 0;
(2)建立結構基於現有表的臨時表
不能使用該CREATE TEMPORARY TABLE … LIKE語句。而是,使用以下語法:
CREATE TEMPORARY TABLE temp_table_name SELECT * FROM original_table LIMIT 0;
範例:
//下面的範例建立一個臨時表,該表按收入儲存前10名客戶。臨時表的結構是從以下SELECT語句派生的: CREATE TEMPORARY TABLE top_customers SELECT p.customerNumber, c.customerName, ROUND(SUM(p.amount),2) sales FROM payments p INNER JOIN customers c ON c.customerNumber = p.customerNumber GROUP BY p.customerNumber ORDER BY sales DESC LIMIT 10; //從top_customers臨時表中查詢資料,就像從永久表中查詢一樣: SELECT customerNumber, customerName, sales FROM top_customers ORDER BY sales;
2.刪除
可以通過DROP TABLE語句刪除臨時表,但不推薦這樣,因為當臨時表與永久表同名時,有可能會誤刪永久表,當然若你已經準備好機票,我就祝你一路順風吧!若你未曾準備好機票,這裡也給你提供中航訂票電話:0086-95583 | 0086-10-95583,祝你好運!
推薦:
DROP TEMPORARY TABLE table_name;
注意:
(1)如果嘗試使用該DROP TEMPORARY TABLE語句刪除永久表,則會收到一條錯誤訊息,提示您嘗試刪除的表是未知的。愉快地避免刪表的誤操作了。
(2)如果開發使用連線池或持久連線的應用程式,則不能保證在終止應用程式時自動刪除臨時表。因為該應用程式使用的資料庫連線可能仍處於開啟狀態,並放置在連線池中,以便其他使用者端以後再使用。因此,一個好習慣是在不再使用臨時表時始終刪除它們。
(3)在採用連線池的情況下,為防止多次CREATE 、 DROP TEMPORARY TABLE帶來的效能瓶頸,可以使用CREATE IF NOT EXISTS + TRUNCATE TABLE 的方式來提升效能。(注意:IF NOT EXISTS是在TABLE之後,table_name之前的。)
(1)通過使用CREATE TEMPORARY TABLE語句建立一個臨時表。請注意,該關鍵字TEMPORARY已新增到CREATE和TABLE關鍵字之間 。
(2)當對談結束或連線終止時,MySQL自動刪除臨時表。當然,您可以在DROP TABLE不再使用臨時表時使用該 語句顯式刪除該臨時表。
(3)臨時表僅對建立它的使用者端可用並且可以存取。不同的使用者端可以建立具有相同名稱的臨時表而不會導致錯誤,因為只有建立臨時表的使用者端才能看到它。但是,在同一對談中,兩個臨時表不能共用相同的名稱。
(4)臨時表可以與資料庫中的普通表具有相同的名稱。例如,如果您建立一個employees在範例資料庫中命名的臨時表,則現有employees表將變得不可存取。您針對該employees表發出的每個查詢現在都參照該臨時表 employees。當您刪除employees臨時表時,永久employees表可用且可存取。
但即使臨時表可以與永久表具有相同的名稱,也不建議使用。因為這可能導致混亂並可能導致意外的資料丟失。例如,如果與資料庫伺服器的連線丟失並且您自動重新連線到伺服器,則無法區分臨時表和永久表。然後,您可以發出一條DROP TABLE 語句刪除永久表而不是臨時表,這是不期望的。為避免此問題,可以使用該DROP TEMPORARY TABLE語句刪除臨時表。
MySQL不提供直接檢查臨時表是否存在的函數或語句。但是,我們可以建立一個儲存過程來檢查臨時表是否存在,如下所示:
DELIMITER // CREATE PROCEDURE check_table_exists(table_name VARCHAR(100)) BEGIN DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @err = 1; SET @err = 0; SET @table_name = table_name; SET @sql_query = CONCAT('SELECT 1 FROM ',@table_name); PREPARE stmt1 FROM @sql_query; IF (@err = 1) THEN SET @table_exists = 0; ELSE SET @table_exists = 1; DEALLOCATE PREPARE stmt1; END IF; END // DELIMITER ; //在此過程中,我們嘗試從臨時表中選擇資料。如果臨時表存在,則將該@table_exists變數設定為1,否則,將其設定為0。 //該語句呼叫check_table_exists來檢查臨時表是否credits 存在: CALL check_table_exists('credits'); SELECT @table_exists; //根據輸出判斷臨時表是否存在
我們知道還有一種通過儲存引擎建立臨時表的方式ENGINE|TYPE = MEMORY,這種方式建立的臨時表是在記憶體中的,效率在理論上是比TEMPORARY更高的,因為MEMORY是在記憶體中,TEMPORARY是同永久表在磁碟上的。
範例:
CREATE TEMPORARY TABLE table_name( column_1_definition, column_2_definition, ..., table_constraints ) ENGINE|TYPE = MEMORY;
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45