Most popular

วันอังคารที่ 28 มิถุนายน พ.ศ. 2554

เจาะ Auto Increment ของ Firebird ทำงานอย่างไร

คราวที่แล้วผู้เขียนได้นำเสนอการใช้งานเบื้องต้นกับฐานข้อมูล Firebird ไปแล้ว ตอนนี้ขอเก็บตกในส่วนที่น่าสนใจอีกส่วนนึง คือการจัดการ Field ที่เป็นแบบ Auto Increment หรือแบบตัวเลขอัตโนมัตินั่นเอง
ความเป็นฐานข้อมูลที่ทำงานตรงไปตรงมากึ่ง Manual นี่เอง ซึ่งหากเราเข้าใจการทำงานทั้งหมดก็จะนำไปประยุคใช้ได้อย่างมีประสิทธิภาพมากขึ้น
จากฐานข้อมูล TEST และ Table EMPLOYEE ที่ผู้เขียนได้สร้างขึ้น ผู้เขียนจะทำการเพิ่ม Field "EMPLOYEE_ID" ให้เป็นประเภท INTEGER พร้อมกำหนดให้เป็นแบบ Autoincrement โดยใช้โปรแกรม SQL Manager Interbase/Firebird เหมือนเดิม

กำหนดตามภาพ
จะเห็นว่าในเมนูทางด้านซ้ายจะปรากฎ Autoincrement ขึ้น

Autoincrement ภายในประกอบด้วย Generator , Trigger และ Procedure
นั่นหมายความว่าหากจะทำการกำหนด Field ให้เป็นแบบ Autoincrement แล้ว การทำงานของ Autoincrement จะสัมพันกับ 3 ส่วนคือ Generator , Trigger , Procedure ซึ่งทั้ง 3 ส่วนนี้โปรแกรม SQL Manager จะสร้าง SQL Code ให้เอง

ในส่วนของ Generator ก็ทำงานเหมือนกัยตัวแปรที่คอยเก็บค่าการเพิ่มตัวเลขเอาไว้ สามารถเปลี่ยนชื่อ และตั้งค่าเริ่มต้นได้ ในที่นี้ให้เริ่มต้นที่ 0
ในส่วนของ Trigger โปรแกรมจะเขียน Trigger ให้ทำงานก่อนที่จะเพิ่มข้อมูลเข้ามา (Before Insert)
Trigger Code
//สร้าง Trigger ชื่อ BI_EMPLOYEE_EMPLOYEE_ID ของ Table EMPLOYEE

CREATE TRIGGER BI_EMPLOYEE_EMPLOYEE_ID FOR EMPLOYEE
//ให้ทำงานก่อนมีการเพิ่มข้อมูล
ACTIVE BEFORE INSERT 
//กำหนดตำแหน่งการทำงานที่ 0
POSITION 0
AS 
BEGIN
  //ถ้า Field EMPLOYEE_ID ที่เพิ่มเข้ามาเป็น NULL
  IF (NEW.EMPLOYEE_ID IS NULL) THEN
      //ให้ Function GEN_ID เพิ่มค่า Generator "EMPLOYEE_EMPLOYEE_ID_GEN" ขึ้นที่ละ 1 แล้วเอาใส่ใน Field EMPLOYEE_ID 
      NEW.EMPLOYEE_ID = GEN_ID(EMPLOYEE_EMPLOYEE_ID_GEN, 1);
END


ในส่วนของ Procedure เป็น Code ที่ใช้ในการเปลี่ยนค่าใน Field "EMPLOYEE_ID"
Procedure
//สร้าง Procedure ชื่อ "EMPLOYEE_EMPLOYEE_ID_AUTOINC"


CREATE PROCEDURE EMPLOYEE_EMPLOYEE_ID_AUTOINC
//คืนค่าเป็น INTEGER
RETURNS (NEW_VALUE INTEGER)
AS
BEGIN
  //เพิ่มค่า Generator "EMPLOYEE_EMPLOYEE_ID_GEN" ขึ้นอีก 1
  NEW_VALUE = GEN_ID(EMPLOYEE_EMPLOYEE_ID_GEN, 1);
END

ผู้เขียนใส่ Description แล้วกด OK เพื่อเพิ่ม Field จากนั้นกด Compile ด้วย

หน้าต่างแสดงค่าต่างๆ บ่งบอกว่าจะมีการสร้าง Generator กด Commit เพื่อยืนยัน
จะเห็นว่าใน Tab Databases ซ้ายมือจะมีการสร้าง Trigger และ Generator ขึ้นมาให้แล้ว

ทดสอบเพิ่มข้อมูลลงใน Table EMPLOYEE

เพิ่มข้อมูลแล้วกด Commit  Trigger จะทำงานทันทีจะได้ค่าของ Field เพิ่มขึ้นเรื่อยๆ
สามารถเข้าไปดูในกลุ่มของ Generator เพื่อดูค่าที่เพิ่มขึ้นได้

จากตัวอย่างมีการเพิ่มข้อมูล 2 Record ค่าของ EMPLOYEE_EMPLOYEE_ID_GEN ก็เพิ่มเป็น 2 เช่นเดียวกัน

ไม่มีความคิดเห็น:

แสดงความคิดเห็น