- 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.