MySQL การใช้งานฟังก์ชัน DATABASE()

ฟังก์ชัน DATABASE() ใน MySQL ใช้เพื่อคืนชื่อของฐานข้อมูล (database) ที่กำลังถูกใช้งานอยู่ใน session ปัจจุบัน หรือกล่าวง่าย ๆ ก็คือ DATABASE() จะบอกว่า query ที่เรากำลังรันอยู่นั้น กำลังทำงานอยู่บนฐานข้อมูลใด

หากยังไม่ได้เลือกฐานข้อมูล (เช่น ยังไม่ได้ใช้ USE db_name) ฟังก์ชันนี้จะคืนค่า NULL

ประโยชน์ของฟังก์ชัน DATABASE()

  • ตรวจสอบว่าขณะนี้กำลังใช้งานฐานข้อมูลไหน
  • ใช้ในระบบที่เชื่อมต่อหลายฐานข้อมูล เพื่อเช็ก context ของแต่ละ query
  • ใช้สำหรับการ log ว่า query ใดรันบน database อะไร
  • ใช้ใน stored procedure หรือ script ที่รันหลายฐานข้อมูล เพื่อควบคุมความถูกต้อง
  • ใช้ช่วย debug หรือ audit บันทึกการทำงาน

รูปแบบการใช้งาน

DATABASE()

ตัวอย่างการใช้งาน

SQL
SELECT DATABASE() AS current_db;
-- ถ้ากำลังใช้ฐานข้อมูลชื่อ sakila → ผลลัพธ์: 'sakila'

สมมติว่ามีตารางชื่อ query_log ซึ่งเก็บข้อมูลดังนี้

log_id db_name user query_text executed_at
1sakilaadminSELECT * FROM actor2024-04-10 08:45:00
2hr_dbdeveloperUPDATE employees SET …2024-04-10 09:12:10

บันทึกว่า query รันบนฐานข้อมูลใด

SQL
INSERT INTO query_log (db_name, user, query_text, executed_at)
VALUES (DATABASE(), CURRENT_USER(), 'SELECT * FROM employees', NOW());

หรือสามารถดูชื่อฐานข้อมูลปัจจุบันได้แบบง่ายๆ

SQL
SELECT DATABASE();

หมายเหตุ

  • หากยังไม่ได้ใช้คำสั่ง USE your_database หรือยังไม่ได้เลือกฐานข้อมูลผ่านเครื่องมือ GUI ฟังก์ชัน DATABASE() จะคืนค่า NULL
  • หากใช้ร่วมกับหลาย database โดยใช้ db_name.table_name ผลลัพธ์จาก DATABASE() จะไม่เปลี่ยนตาม table ที่อ้างอิง แต่จะขึ้นกับคำสั่ง USE
  • ไม่ควรใช้ DATABASE() เพื่อตรวจสอบสิทธิ์หรือทำระบบ security โดยตรง เพราะค่าที่ได้เป็นเพียง context ของ session
  • ผลลัพธ์จะขึ้นอยู่กับ connection ปัจจุบันเท่านั้น
แชร์เรื่องนี้