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

สร้างตารางแบบไดนามิกใน MySQL ด้วย Stored Procedure

ใช้ PREPARE / EXECUTE ภายใน Stored Procedure สร้างตารางจากชื่อที่รับเข้ามา

ตัวอย่าง Stored Procedure

DELIMITER $$
CREATE PROCEDURE creatingDynamicTableDemo(yourTableName VARCHAR(200))
BEGIN
    SET @name = yourTableName;
    SET @st = CONCAT('
        CREATE TABLE IF NOT EXISTS `', @name, '` (
            `StudentId` INT UNSIGNED NOT NULL AUTO_INCREMENT,
            `StudentName` VARCHAR(20) NOT NULL,
            PRIMARY KEY (`StudentId`)
        )
    ');
    PREPARE myStatement FROM @st;
    EXECUTE myStatement;
    DEALLOCATE PREPARE myStatement;
END $$
DELIMITER ;

เรียกใช้ Procedure

mysql> CALL creatingDynamicTableDemo('DemoTable');

ตรวจสอบโครงสร้าง

mysql> DESC DemoTable;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| StudentId   | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| StudentName | varchar(20)      | NO   |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

ข้อควรระวังด้านความปลอดภัย (SQL Injection)

  • ใช้ Backtick ` ครอบชื่อตาราง/คอลัมน์: CONCAT('`', @name, '`')
  • Validate Input: ชื่อตารางต้อง match regex ^[a-zA-Z0-9_]+$
  • หลีกเลี่ยง Dynamic SQL หากเป็นไปได้

ใช้งานจริง: Partitioning / Sharding

-- สร้างตารางรายเดือน
CALL create_monthly_table('sales_2024_01');
CALL create_monthly_table('sales_2024_02');