ในบทความนี้จะใช้แพ็คเกจ mariadb จาก NPM.
คำสั่งเริ่มต้นแบบธรรมดา
const mariadb = require('mariadb');
คำสั่งเริ่มต้นแบบ module
import * as mariadb from 'mariadb';
ในตัวอย่างด้านล่างจากนี้ไป จะขอใช้คำสั่งเริ่มต้นแบบ module ซึ่งสำหรับผู้ใช้แบบธรรมดาก็แค่เปลี่ยนจากรูปแบบ import
ไปเป็น require
เท่านั้น.
createConnection()
กับ createPool()
การสั่งเชื่อมต่อฐานข้อมูลด้วย createConnection()
นั้นจะเป็นการเชื่อมต่อแบบเดี่ยวๆ ซึ่งอาจจะทำให้ช้าเมื่อมีการเรียกใช้ query จำนวนมากๆ ต่างจากการเชื่อมต่อด้วย createPool()
ซึ่งจะเปิดได้หลายๆ connection.
สิ่งที่จะต้องทำเมื่อใช้ createPool()
คือจะต้องเรียกใช้ getConnection()
เพื่อให้การเชื่อมต่อนั้นมีค่าเหมือนกันกับ createConnection()
และโค้ดหลังจากนั้นก็จะทำงานได้เหมือนกัน.
ตัวอย่าง
// แบบ createConnection()
const conn1 = mariadb.createConnection({
host: 'localhost',
user: 'myuser',
password: 'mypassword',
});
// นำ conn1 ไปใช้
conn1.end()
// แบบ createPool()
const pool = mariadb.createPool({
host: 'localhost',
user: 'myuser',
password: 'mypassword',
});
const conn2 = await pool.getConnection();
// นำ conn2 ไปใช้
conn2.release();
conn2.end();
pool.end();
จากตัวอย่างด้านบน ค่าคงที่ conn1
และ conn2
จะมีค่านำไปใช้สั่งงานกับฐานข้อมูลได้เหมือนกัน. ในขั้นตอนปิดการเชื่อมต่อ ถ้าเป็นแบบ pool จะต้องสั่ง release()
และสั่ง end()
สำหรับ pool ด้วย มิฉะนั้นตัวโปรแกรมจะทำงานค้างอยู่ไม่สิ้นสุดการทำงาน.
SELECT
ข้อมูล
การสั่ง SELECT
ทำได้โดยทั้งใช้ query()
หรือ prepare()
แล้วตามด้วย execute()
.
ตัวอย่าง
// สั่งเลือกฐานข้อมูลก่อน (สามารถกำหนดในตอนเชื่อมต่อเลยก็ได้เช่นกัน)
await conn.query('USE `my_database`');
// ใช้ query()
const result = await conn.query('SELECT * FROM `my_table` WHERE `id` = ?', [12]);
// ใช้ prepare() + execute()
const prepare = await conn.prepare('SELECT * FROM `my_table` WHERE `id` = ?');
const result2 = await prepare.execute([12]);
จากตัวอย่างด้านบน ค่าของ result
และ result2
จะออกมาเหมือนกัน คือในรูปแบบ array.
ตัวอย่างผลลัพธ์
[
{
id: 12,
name: 'John'
}
]
Insert, update ข้อมูล
การสั่ง INSERT
, UPDATE
ข้อมูลก็ทำในลักษณะเดียวกันกับ SELECT
เพียงแต่ผลลัพธ์ที่ได้จากการ query()
หรือ execute()
จะแตกต่างออกไป คือจะได้ในรูปแบบ JSON result-set.