Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

สร้าง Temporary Table ใน MySQL Stored Procedure

ใช้ CREATE TEMPORARY TABLE ภายใน Stored Procedure ตารางจะหายเมื่อ Session จบ

ไวยากรณ์

CREATE PROCEDURE yourProcedureName()
BEGIN
    CREATE TEMPORARY TABLE yourTemporaryTableName SELECT yourValue;
END

ตัวอย่างครบถ้วน

1. สร้าง Procedure สร้าง Temp Table

mysql> DELIMITER //
mysql> CREATE PROCEDURE create_Temporary_Table()
    -> BEGIN
    ->     CREATE TEMPORARY TABLE tmpDemoTable SELECT 500;
    -> END//
Query OK, 0 rows affected (0.15 sec)

2. สร้าง Procedure แทรกข้อมูลเพิ่ม

mysql> CREATE PROCEDURE insert_Record_InTempTable()
    -> BEGIN
    ->     INSERT INTO tmpDemoTable VALUES (300);
    -> END//
Query OK, 0 rows affected (0.06 sec)

mysql> DELIMITER ;

3. เรียกใช้งาน

mysql> CALL create_Temporary_Table();
mysql> CALL insert_Record_InTempTable();

ผลลัพธ์

+-----+
| 500 |
+-----+
| 500 |
| 300 |
+-----+

คุณสมบัติ Temporary Table

  • มองเห็นได้เฉพาะ Session ที่สร้าง (Connection อื่นไม่เห็น)
  • หายอัตโนมัติเมื่อจบ Session หรือ DROP TEMPORARY TABLE
  • ชื่อสามารถซ้ำกับตารางปกติได้ (Scope แยกกัน)
  • ไม่ทำให้เกิด Lock บนตารางปกติ

ใช้งานจริง: Complex Query สับซ้อน

CREATE PROCEDURE complex_report()
BEGIN
    CREATE TEMPORARY TABLE tmp_sales AS 
    SELECT product_id, SUM(qty) AS total_qty FROM sales GROUP BY product_id;
    
    CREATE TEMPORARY TABLE tmp_inventory AS
    SELECT product_id, stock FROM inventory;
    
    SELECT s.product_id, s.total_qty, i.stock 
    FROM tmp_sales s JOIN tmp_inventory i USING (product_id);
    
    DROP TEMPORARY TABLE tmp_sales, tmp_inventory;
END