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

เพิ่มข้อมูลอัตโนมัติในช่วงค่าที่กำหนดใน MySQL ด้วย Stored Procedure

บทนำ

การ 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 และทำงานได้เร็วกว่าสำหรับข้อมูลมาก