
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 清空表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - 插入查詢
- MySQL - 選擇查詢
- MySQL - 更新查詢
- MySQL - 刪除查詢
- MySQL - 替換查詢
- MySQL - 插入忽略
- MySQL - 插入重複鍵更新
- MySQL - 插入到選擇
- MySQL 運算子和子句
- MySQL - Where 子句
- MySQL - Limit 子句
- MySQL - Distinct 子句
- MySQL - Order By 子句
- MySQL - Group By 子句
- MySQL - Having 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - Like 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - Between 運算子
- MySQL - UNION 運算子
- MySQL - UNION 與 UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - 內連線
- MySQL - 左連線
- MySQL - 右連線
- MySQL - 交叉連線
- MySQL - 全連線
- MySQL - 自連線
- MySQL - 刪除連線
- MySQL - 更新連線
- MySQL - Union 與 Join
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - 插入前觸發器
- MySQL - 插入後觸發器
- MySQL - 更新前觸發器
- MySQL - 更新後觸發器
- MySQL - 刪除前觸發器
- MySQL - 刪除後觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 雜項概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - Signal
- MySQL - Resignal
- MySQL - 字元集
- MySQL - 校對
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 當天日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - Explain
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - 顯示 Processlist
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - Coalesce() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 臨時表
什麼是臨時表?
臨時表是在資料庫中建立的用於臨時儲存資料的表。這些表將在當前客戶端會話終止或結束時自動刪除。此外,如果使用者決定手動刪除它們,則可以顯式刪除這些表。您可以對臨時表執行各種 SQL 操作,就像對永久表一樣,包括 CREATE、UPDATE、DELETE、INSERT、JOIN 等。
臨時表在 MySQL 3.23 版本中引入。如果您使用的是 3.23 之前的舊版 MySQL,則無法使用臨時表,而是可以使用堆表。
如前所述,臨時表僅在會話處於活動狀態時才會存在。如果您在 PHP 指令碼中執行程式碼,則指令碼執行完成後,臨時表將自動銷燬。如果您透過 MySQL 客戶端程式連線到 MySQL 資料庫伺服器,則臨時表將一直存在,直到您關閉客戶端或手動銷燬該表。
在 MySQL 中建立臨時表
在 MySQL 中建立臨時表與建立常規資料庫表非常相似。但是,我們不使用 CREATE TABLE,而是使用 CREATE TEMPORARY TABLE 語句。
語法
以下是 MySQL 中建立臨時表的語法:
CREATE TEMPORARY TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY( one or more columns ) );
示例
首先,讓我們使用以下查詢建立一個名為CUSTOMERS的臨時表:
CREATE TEMPORARY TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
與普通表類似,我們可以使用 INSERT 語句將記錄插入臨時表。在這裡,我們將三條記錄插入到上面建立的臨時表中:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'kaushik', 23, 'Kota', 2000.00 );
執行以下查詢以顯示臨時表 CUSTOMERS 的所有記錄。
SELECT * FROM CUSTOMERS;
以下是 CUSTOMERS 表的記錄:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
當我們發出 SHOW TABLES 命令時,我們的臨時表不會顯示在表列表中。要驗證臨時表是否存在,我們需要使用SELECT語句檢索其資料。臨時表將在我們結束會話時刪除,因此如果我們登出 MySQL 然後嘗試發出 SELECT 命令,我們將找不到資料庫中的臨時表。
在 MySQL 中刪除臨時表
儘管 MySQL 在資料庫連線結束時會自動刪除臨時表,但如果需要,我們仍然可以使用 DROP TEMPORARY TABLE 命令自己刪除它們。
語法
以下是 MySQL 中刪除臨時表的語法:
DROP TEMPORARY TABLE table_name;
示例
在以下查詢中,我們刪除了在前面示例中建立的臨時表 CUSTOMERS:
DROP TEMPORARY TABLE CUSTOMERS;
輸出
執行以上查詢將產生以下輸出:
Query OK, 0 rows affected (0.00 sec)
驗證
現在,讓我們使用以下查詢驗證臨時表 CUSTOMERS,檢索其記錄:
SELECT * FROM CUSTOMERS;
由於我們刪除了臨時表 CUSTOMERS,它將生成一條錯誤訊息,指出表不存在。
ERROR 1146: Table 'TUTORIALS.CUSTOMERS' doesn't exist
使用客戶端程式建立臨時表
除了使用 MySQL 查詢在 MySQL 資料庫中建立臨時表之外,我們還可以使用客戶端程式對錶執行“TEMPORARY TABLE”操作。
語法
以下是各種程式語言中在 MySQL 資料庫中建立臨時表的語法:
要透過 PHP 程式在 MySQL 資料庫中建立臨時表,我們需要使用mysqli函式query()執行建立臨時表語句,如下所示:
$sql="CREATE temporary Table table_name(column_name, column_type, ...)"; $mysqli->query($sql);
要透過 Node.js 程式在 MySQL 資料庫中建立臨時表,我們需要使用mysql2庫的query()函式執行建立臨時表語句,如下所示:
sql="CREATE temporary Table table_name(column_name, column_type, ...)"; con.query(sql);
要透過 Java 程式在 MySQL 資料庫中建立臨時表,我們需要使用JDBC函式executeUpdate()執行建立臨時表語句,如下所示:
String sql="CREATE temporary Table table_name(column_name, column_type, ...)"; statement.executeQuery(sql);
要透過 Python 程式在 MySQL 資料庫中建立臨時表,我們需要使用 MySQLConnector/Python的execute()函式執行建立臨時表語句,如下所示:
sql="CREATE temporary Table table_name(column_name, column_type, ...)"; cursorObj.execute(sql);
示例
以下是程式:
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); $sql = "CREATE TEMPORARY TABLE SalesSummary (" . " product_name VARCHAR(50) NOT NULL, " . " total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00, " . " avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00, " . " total_units_sold INT UNSIGNED NOT NULL DEFAULT 0 )"; if ($mysqli->query($sql)) { printf("temporary table created successfully.
"); } if ($mysqli->errno) { printf("temporary table could not be created: %s
", $mysqli->error); } $mysqli->close();
輸出
獲得的輸出如下:
temporary table created successfully.
var mysql = require('mysql2'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "Nr5a0204@123" }); //Connecting to MySQL con.connect(function (err) { if (err) throw err; console.log("Connected!"); console.log("--------------------------"); //Creating a Database sql = "CREATE DATABASE testdb" con.query(sql); //Selecting a Database sql = "USE testdb" con.query(sql); //Creating table sql = "CREATE TEMPORARY TABLE SalesSummary (product_name VARCHAR(50) NOT NULL, total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00, avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00, total_units_sold INT UNSIGNED NOT NULL DEFAULT 0);" con.query(sql); sql = "INSERT INTO SalesSummary(product_name, total_sales, avg_unit_price, total_units_sold)VALUES('cucumber', 100.25, 90, 2);" con.query(sql); sql = "SELECT * FROM SalesSummary;" con.query(sql, function(err, result){ if (err) throw err console.log("**SalesSummary Table:**") console.log(result); }); });
輸出
產生的輸出如下:
Connected! -------------------------- **SalesSummary Table:** [ { product_name: 'cucumber', total_sales: '100.25', avg_unit_price: '90.00', total_units_sold: 2 } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TemporaryTable { public static void main(String[] args){ String url = "jdbc:mysql://:3306/TUTORIALS"; String username = "root"; String password = "password"; try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); System.out.println("Connected successfully...!"); //Create temporary table...! String sql = "CREATE TEMPORARY TABLE SalesSummary (product_name VARCHAR(50) NOT NULL, total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00, avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00, total_units_sold INT UNSIGNED NOT NULL DEFAULT 0 )"; statement.executeUpdate(sql); System.out.println("Temporary table created successfully...!"); ResultSet resultSet = statement.executeQuery("DESCRIBE SalesSummary"); while(resultSet.next()) { System.out.print(resultSet.getNString(1)); System.out.println(); } connection.close(); } catch(Exception e){ System.out.println(e); } } }
輸出
獲得的輸出如下所示:
Connected successfully...! Temporary table created successfully...! product_name total_sales avg_unit_price total_units_sold
import mysql.connector #establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) table_name = 'tutorials_tbl_temp' #Creating a cursor object cursorObj = connection.cursor() create_table_query = f"CREATE TEMPORARY TABLE {table_name} (NAME VARCHAR(50), ID INT)" cursorObj.execute(create_table_query) print(f"Temporary table '{table_name}' is created successfully.") cursorObj.close() connection.close()
輸出
以下是上述程式碼的輸出:
Temporary table 'tutorials_tbl_temp' is created successfully.