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

mysql臨時(shí)表插入數(shù)據(jù)方式

 更新時(shí)間:2022年09月26日 11:10:38   作者:嶼舟  
這篇文章主要介紹了mysql臨時(shí)表插入數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mysql臨時(shí)表插入數(shù)據(jù)

臨時(shí)表

1.在數(shù)據(jù)庫斷開連接的時(shí)候會(huì)自動(dòng)刪除臨時(shí)表。

 create temporary table IF NOT EXISTS client.getstucou(
  type_id int
 )Engine=InnoDB default charset utf8;

注意:在存儲(chǔ)過程中創(chuàng)建了臨時(shí)表的情況的話,在外面使用查詢語句是找不到這張表的。

例如:

在存儲(chǔ)過程中的sql語句中才而能找到該表。

2.臨時(shí)表插入(select語句查出的數(shù)據(jù)集合)。INSERT INTO 表名 (查詢到的集合)

例如:UNION ALL(將兩個(gè)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中臨時(shí)表(TEMPORARY)

首先來看看官網(wǎng)給的有關(guān)MySQL的臨時(shí)表的簡介:

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.

總結(jié)而來就是:

當(dāng)我們需要使用難以接受的或開銷很大的一個(gè)SELECT語句和JOIN子句的數(shù)據(jù)時(shí),臨時(shí)表非常方便。

語法

大致同CREATE TABLE語法,創(chuàng)建臨時(shí)表則是CREATE TEMPORARY TABLE,增加了TEMPORARY關(guān)鍵字表示臨時(shí)表。

1.創(chuàng)建

(1)創(chuàng)建不同于現(xiàn)有表的臨時(shí)表

CREATE TEMPORARY TABLE table_name(
? ?column_1_definition,
? ?column_2_definition,
? ?...,
? ?table_constraints
);

實(shí)例:

//首先,創(chuàng)建一個(gè)新的臨時(shí)表,稱為credits存儲(chǔ)客戶的信用:
CREATE TEMPORARY TABLE credits(
? ? customerNumber INT PRIMARY KEY,
? ? creditLimit DEC(10,2)
);
//然后,將customers表中的行插入臨時(shí)表中credits:
INSERT INTO credits(customerNumber,creditLimit)
SELECT customerNumber, creditLimit
FROM customers
WHERE creditLimit > 0;

(2)創(chuàng)建結(jié)構(gòu)基于現(xiàn)有表的臨時(shí)表

不能使用該CREATE TEMPORARY TABLE … LIKE語句。而是,使用以下語法:

CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM original_table
LIMIT 0;

實(shí)例:

//下面的示例創(chuàng)建一個(gè)臨時(shí)表,該表按收入存儲(chǔ)前10名客戶。臨時(shí)表的結(jié)構(gòu)是從以下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臨時(shí)表中查詢數(shù)據(jù),就像從永久表中查詢一樣:
SELECT?
? ? customerNumber,?
? ? customerName,?
? ? sales
FROM
? ? top_customers
ORDER BY sales;

2.刪除

可以通過DROP TABLE語句刪除臨時(shí)表,但不推薦這樣,因?yàn)楫?dāng)臨時(shí)表與永久表同名時(shí),有可能會(huì)誤刪永久表,當(dāng)然若你已經(jīng)準(zhǔn)備好機(jī)票,我就祝你一路順風(fēng)吧!若你未曾準(zhǔn)備好機(jī)票,這里也給你提供中航訂票電話:0086-95583 | 0086-10-95583,祝你好運(yùn)!

推薦:

DROP TEMPORARY TABLE table_name;

注意:

(1)如果嘗試使用該DROP TEMPORARY TABLE語句刪除永久表,則會(huì)收到一條錯(cuò)誤消息,提示您嘗試刪除的表是未知的。愉快地避免刪表的誤操作了。

(2)如果開發(fā)使用連接池或持久連接的應(yīng)用程序,則不能保證在終止應(yīng)用程序時(shí)自動(dòng)刪除臨時(shí)表。因?yàn)樵搼?yīng)用程序使用的數(shù)據(jù)庫連接可能仍處于打開狀態(tài),并放置在連接池中,以便其他客戶端以后再使用。因此,一個(gè)好習(xí)慣是在不再使用臨時(shí)表時(shí)始終刪除它們。

(3)在采用連接池的情況下,為防止多次CREATE 、 DROP TEMPORARY TABLE帶來的性能瓶頸,可以使用CREATE IF NOT EXISTS + TRUNCATE TABLE 的方式來提升性能。(注意:IF NOT EXISTS是在TABLE之后,table_name之前的。)

功能

(1)通過使用CREATE TEMPORARY TABLE語句創(chuàng)建一個(gè)臨時(shí)表。請(qǐng)注意,該關(guān)鍵字TEMPORARY已添加到CREATE和TABLE關(guān)鍵字之間 。

(2)當(dāng)會(huì)話結(jié)束或連接終止時(shí),MySQL自動(dòng)刪除臨時(shí)表。當(dāng)然,您可以在DROP TABLE不再使用臨時(shí)表時(shí)使用該 語句顯式刪除該臨時(shí)表。

(3)臨時(shí)表僅對(duì)創(chuàng)建它的客戶端可用并且可以訪問。不同的客戶端可以創(chuàng)建具有相同名稱的臨時(shí)表而不會(huì)導(dǎo)致錯(cuò)誤,因?yàn)橹挥袆?chuàng)建臨時(shí)表的客戶端才能看到它。但是,在同一會(huì)話中,兩個(gè)臨時(shí)表不能共享相同的名稱。

(4)臨時(shí)表可以與數(shù)據(jù)庫中的普通表具有相同的名稱。例如,如果您創(chuàng)建一個(gè)employees在示例數(shù)據(jù)庫中命名的臨時(shí)表,則現(xiàn)有employees表將變得不可訪問。您針對(duì)該employees表發(fā)出的每個(gè)查詢現(xiàn)在都引用該臨時(shí)表 employees。當(dāng)您刪除employees臨時(shí)表時(shí),永久employees表可用且可訪問。

但即使臨時(shí)表可以與永久表具有相同的名稱,也不建議使用。因?yàn)檫@可能導(dǎo)致混亂并可能導(dǎo)致意外的數(shù)據(jù)丟失。例如,如果與數(shù)據(jù)庫服務(wù)器的連接丟失并且您自動(dòng)重新連接到服務(wù)器,則無法區(qū)分臨時(shí)表和永久表。然后,您可以發(fā)出一條DROP TABLE 語句刪除永久表而不是臨時(shí)表,這是不期望的。為避免此問題,可以使用該DROP TEMPORARY TABLE語句刪除臨時(shí)表。

檢查是否存在臨時(shí)表

MySQL不提供直接檢查臨時(shí)表是否存在的函數(shù)或語句。但是,我們可以創(chuàng)建一個(gè)存儲(chǔ)過程來檢查臨時(shí)表是否存在,如下所示:

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 ;
//在此過程中,我們嘗試從臨時(shí)表中選擇數(shù)據(jù)。如果臨時(shí)表存在,則將該@table_exists變量設(shè)置為1,否則,將其設(shè)置為0。
//該語句調(diào)用check_table_exists來檢查臨時(shí)表是否credits 存在:
CALL check_table_exists('credits');
SELECT @table_exists;
//根據(jù)輸出判斷臨時(shí)表是否存在

與MEMORY比較

我們知道還有一種通過存儲(chǔ)引擎創(chuàng)建臨時(shí)表的方式ENGINE|TYPE = MEMORY,這種方式創(chuàng)建的臨時(shí)表是在內(nèi)存中的,效率在理論上是比TEMPORARY更高的,因?yàn)镸EMORY是在內(nèi)存中,TEMPORARY是同永久表在磁盤上的。

實(shí)例:

CREATE TEMPORARY TABLE table_name(
? ?column_1_definition,
? ?column_2_definition,
? ?...,
? ?table_constraints
) ENGINE|TYPE = MEMORY;

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 修改MYSQL密碼的幾種常用方法總結(jié)

    修改MYSQL密碼的幾種常用方法總結(jié)

    以下是對(duì)修改MYSQL密碼的幾種常用方法進(jìn)行了總結(jié)介紹,需要的朋友可以過來參考下
    2013-08-08
  • 深入分析mysql為什么不推薦使用uuid或者雪花id作為主鍵

    深入分析mysql為什么不推薦使用uuid或者雪花id作為主鍵

    這篇文章主要介紹了深入分析mysql為什么不推薦使用uuid或者雪花id作為主鍵,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • MySQL中獲取最大值MAX()函數(shù)和ORDER BY … LIMIT 1比較

    MySQL中獲取最大值MAX()函數(shù)和ORDER BY … LIMIT 1比較

    mysql取最大值的的是max 和order by兩種方式,同時(shí)也大多數(shù)人人為max的效率更高,在本文中,我們將介紹MySQL中MAX()和ORDER BY … LIMIT 1兩種獲取最大值的方法以及它們性能上的差異,同時(shí)我們將探討這種性能差異的原因,并提供一些優(yōu)化建議
    2024-03-03
  • MySQL的隱式類型轉(zhuǎn)換整理總結(jié)

    MySQL的隱式類型轉(zhuǎn)換整理總結(jié)

    隱式類型轉(zhuǎn)換有無法命中索引的風(fēng)險(xiǎn),在高并發(fā)、大數(shù)據(jù)量的情況下,命不中索引帶來的后果非常嚴(yán)重。下面這篇文章主要給大家整理總結(jié)了關(guān)于MySQL的隱式轉(zhuǎn)化,需要的朋友可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • MySQL 內(nèi)存表和臨時(shí)表的用法詳解

    MySQL 內(nèi)存表和臨時(shí)表的用法詳解

    這篇文章主要介紹了MySQL 內(nèi)存表和臨時(shí)表的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Mysql的Binlog數(shù)據(jù)恢復(fù):不小心刪除數(shù)據(jù)庫詳解

    Mysql的Binlog數(shù)據(jù)恢復(fù):不小心刪除數(shù)據(jù)庫詳解

    這篇文章主要介紹了Mysql的Binlog數(shù)據(jù)恢復(fù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • SSM實(shí)現(xiàn)mysql數(shù)據(jù)庫賬號(hào)密碼密文登錄功能

    SSM實(shí)現(xiàn)mysql數(shù)據(jù)庫賬號(hào)密碼密文登錄功能

    這篇文章主要介紹了SSM實(shí)現(xiàn)mysql數(shù)據(jù)庫賬號(hào)密碼密文登錄功能,本文分為三步給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • MySQL 密碼增強(qiáng)插件

    MySQL 密碼增強(qiáng)插件

    這篇文章主要介紹了MySQL 密碼增強(qiáng)插件的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • MySQL 一則慢日志監(jiān)控誤報(bào)的問題分析與解決

    MySQL 一則慢日志監(jiān)控誤報(bào)的問題分析與解決

    這篇文章主要介紹了MySQL 一則慢日志監(jiān)控誤報(bào)的問題分析與解決,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2021-01-01
  • 基于MySql驗(yàn)證的vsftpd虛擬用戶

    基于MySql驗(yàn)證的vsftpd虛擬用戶

    這篇文章主要介紹了基于MySql驗(yàn)證的vsftpd虛擬用戶,文章包括mysql安裝及ftp服務(wù)器安裝過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11

最新評(píng)論