บทนำ
การ Insert ข้อมูลจำนวนมากในช่วงค่าที่กำหนด (Range) สามารถทำได้อัตโนมัติด้วย Stored Procedure ที่ใช้ Loop (WHILE)
ตัวอย่างการสร้างตาราง
mysql> CREATE TABLE DemoTable (
-> Value INT
-> );
Query OK, 0 rows affected (0.55 sec)
สร้าง Stored Procedure: Insert ค่า 10 ถึง 20
mysql> DELIMITER //
mysql> CREATE PROCEDURE AutoInsertValuesToTable()
-> BEGIN
-> DECLARE startingRange INT DEFAULT 10;
-> WHILE startingRange <= 20 DO
-> INSERT INTO DemoTable(Value) VALUES(startingRange);
-> SET startingRange = startingRange + 1;
-> END WHILE;
-> END
-> //
Query OK, 0 rows affected (0.23 sec)
mysql> DELIMITER ;
เรียกใช้ Stored Procedure
mysql> CALL AutoInsertValuesToTable();
Query OK, 1 row affected (1.10 sec)
ตรวจสอบข้อมูลที่เพิ่ม
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+-------+
| Value |
+-------+
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
+-------+
11 rows in set (0.00 sec)
คำอธิบายโครงสร้าง Stored Procedure
DELIMITER // -- เปลี่ยน Delimiter ชั่วคราว
CREATE PROCEDURE ProcedureName()
BEGIN
DECLARE variable TYPE DEFAULT value; -- ประกาศตัวแปร
WHILE condition DO -- วนลูป
-- Statements
SET variable = variable + 1; -- อัปเดตตัวแปร
END WHILE;
END
//
DELIMITER ; -- คืน Delimiter กลับเป็น ;
วิธีอื่น: ใช้ Recursive CTE (MySQL 8.0+)
WITH RECURSIVE numbers AS (
SELECT 10 AS n
UNION ALL
SELECT n + 1 FROM numbers WHERE n < 20
)
INSERT INTO DemoTable(Value)
SELECT n FROM numbers;
วิธีนี้ไม่ต้องสร้าง Stored Procedure และทำงานได้เร็วกว่าสำหรับข้อมูลมาก