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

ตัวแปรผู้ใช้ (User-defined Variables) vs ตัวแปรท้องถิ่น (Local Variables) ใน MySQL

ความแตกต่างระหว่าง User-defined Variables และ Local Variables

User-defined Variables (Session Variables)

  • ขึ้นต้นด้วย @ (เช่น @my_var)
  • เป็น Session-specific - อยู่จนกว่า session จะจบ
  • Loosely typed - ไม่ต้องประกาศชนิดข้อมูล
  • เข้าถึงได้จากทุกที่ใน session เดียวกัน
  • ไม่ถูก re-initialize ระหว่าง session

Local Variables

  • ไม่มี @ นำหน้า
  • ใช้ได้เฉพาะใน Stored Programs (Stored Procedures, Functions, Triggers, Events)
  • ต้องประกาศด้วย DECLARE พร้อม Data Type
  • มีขอบเขต (Scope) ภายใน BEGIN...END block เท่านั้น
  • ถูก re-initialize ทุกครั้งที่เรียก Stored Procedure

การประกาศและกำหนดค่า

User-defined Variables

-- วิธีที่ 1: SET
SET @my_var = 10;

-- วิธีที่ 2: SELECT ด้วย :=
SELECT @my_var := 10;

-- ⚠️ ไม่มี : จะกลายเป็นการเปรียบเทียบ (คืน 0/1)
SELECT @my_var = 10;  -- ผลลัพธ์: 1 (true) แต่ @my_var ไม่เปลี่ยนค่า

Local Variables

DECLARE my_var INT DEFAULT 10;
SET my_var = my_var + 10;
-- หรือ
SELECT my_var + 10 INTO my_var;

ตัวอย่างเปรียบเทียบใน Stored Procedure

DELIMITER //
CREATE PROCEDURE sp_VariableDemo()
BEGIN
    DECLARE local_var INT DEFAULT 10;
    SET local_var = local_var + 10;
    SET @user_var = @user_var + 10;
    SELECT local_var, @user_var;
END //
DELIMITER ;

-- ตั้งค่าเริ่มต้น
SET @user_var = 10;

-- เรียกครั้งที่ 1
CALL sp_VariableDemo();
-- local_var: 20, @user_var: 20

-- เรียกครั้งที่ 2
CALL sp_VariableDemo();
-- local_var: 20 (reset to 10 + 10), @user_var: 30 (20 + 10)

-- เรียกครั้งที่ 3
CALL sp_VariableDemo();
-- local_var: 20, @user_var: 40

ตารางเปรียบเทียบ

คุณสมบัติUser-defined (@var)Local Variable (DECLARE)
ขอบเขต (Scope)Session 全体Stored Program block
ชนิดข้อมูลDynamic (Loosely typed)Static (ต้อง DECLARE)
อายุการใช้งานจนกว่า Session จะจบจนกว่า Block จะจบ
Re-initializationไม่ (คงค่าไว้)ทุกครั้งที่เข้าบล็อก
มองเห็นระหว่าง Sessionไม่ (Session แยกกัน)N/A
ใช้ใน Prepared Statementsได้ไม่ได้

เมื่อไหร่ควรใช้ตัวไหน

  • User-defined: ส่งค่าระหว่าง queries ใน session เดียว, Dynamic SQL, Prepared statements
  • Local: Logic ภายใน Stored Procedure/Function, Temporary calculations, Loop counters