ใน MySQL สามารถสร้าง Stored Procedure ที่รับพารามิเตอร์ แล้ว Insert ข้อมูลลงหลายตารางในครั้งเดียวได้ ใช้ DELIMITER เปลี่ยนตัวคั่นคำสั่งชั่วคราวเพื่อกำหนด Procedure
รูปแบบคำสั่งสร้าง Procedure
DELIMITER //
CREATE PROCEDURE yourProcedureName(IN paramName INT)
BEGIN
INSERT INTO table1(col1) VALUES(paramName);
INSERT INTO table2(col2) VALUES(paramName);
END //
DELIMITER ;
ตัวอย่างการใช้งาน
สร้างตาราง 2 ตาราง:
mysql> create table DemoTable1 (StudentScore int); mysql> create table DemoTable2 (PlayerScore int);
สร้าง Stored Procedure Insert ทั้ง 2 ตาราง
mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_proc(IN value INT)
-> BEGIN
-> INSERT INTO DemoTable1(StudentScore) VALUES(value);
-> INSERT INTO DemoTable2(PlayerScore) VALUES(value);
-> END //
Query OK, 0 rows affected
mysql> DELIMITER ;
เรียกใช้ Procedure
mysql> CALL insert_proc(89);
ตรวจสอบข้อมูลในทั้ง 2 ตาราง
mysql> select * from DemoTable1; -- StudentScore: 89 mysql> select * from DemoTable2; -- PlayerScore: 89
ข้อดีของ Stored Procedure:
- รวม Logic หลายขั้นตอนเป็นหน่วยเดียว (Atomic - ถ้าใช้ Transaction)
- ลด Network Round-trip (ส่งคำสั่งเดียวจาก Client)
- ควบคุมสิทธิ์เข้าถึงข้อมูลได้ละเอียด (Grant EXECUTE บน Procedure แทน INSERT บน Table)
- ซ้อน Logic ธุรกิจ (Business Logic) ไว้ใน Database
หมายเหตุ: ตัวอย่างนี้ยังไม่มี Transaction หากต้องการให้ทั้งสอง Insert สำเร็จหรือล้มเหลวพร้อมกัน ให้เพิ่ม START TRANSACTION; ก่อน และ COMMIT; หลัง (หรือ ROLLBACK; หาก Error)