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

Insert ข้อมูลลง 2 ตารางพร้อมกันด้วย Stored Procedure ใน MySQL

ใน 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)