n8n Thai
by n8n Thai

n8n x MySQL: อ่าน เขียน Query อัตโนมัติ

วิธีเชื่อมต่อ n8n กับ MySQL เพื่ออ่าน เขียน และ Query ข้อมูลอัตโนมัติ พร้อมตัวอย่าง Workflow จริง

n8n x MySQL: อ่าน เขียน Query อัตโนมัติ

MySQL เป็นฐานข้อมูลที่ใช้กันแพร่หลายมากในระบบธุรกิจไทย ไม่ว่าจะเป็นระบบ ERP, เว็บไซต์ WordPress, ระบบ POS หรือ Backend ของ App ต่างๆ ถ้าระบบของคุณใช้ MySQL อยู่ n8n สามารถดึงและเขียนข้อมูลเข้า MySQL ได้โดยตรง ไม่ต้องผ่าน API พิเศษใดๆ

ความสามารถนี้เปิดโอกาสให้สร้าง Workflow ได้หลายอย่าง เช่น ดึงออร์เดอร์ใหม่จาก MySQL แล้วส่งแจ้งเตือนผ่าน LINE, อ่านรายชื่อลูกค้าแล้วส่งอีเมล Newsletter, หรือรับข้อมูลจาก Webhook แล้วบันทึกลง MySQL ทันที

ตั้งค่า MySQL Credentials ใน n8n

ก่อนใช้ MySQL Node ต้องตั้งค่า Credential ที่เก็บข้อมูลการเชื่อมต่อ Database ก่อน

  1. ไปที่ Settings > Credentials > Add Credential

  2. ค้นหาและเลือก MySQL

  3. กรอกข้อมูลต่อไปนี้:

    • Host — IP หรือ Domain ของ MySQL Server เช่น 192.168.1.100 หรือ db.example.com
    • Port — ค่าเริ่มต้นคือ 3306
    • Database — ชื่อ Database ที่ต้องการเชื่อมต่อ
    • User — Username ของ MySQL
    • Password — Password ของ MySQL User
  4. กด Test เพื่อตรวจสอบว่าเชื่อมต่อสำเร็จ แล้วกด Save

ข้อแนะนำด้านความปลอดภัย: สร้าง MySQL User ที่มีสิทธิ์เฉพาะที่ Workflow ต้องการเท่านั้น เช่น ถ้า Workflow แค่อ่านข้อมูล ให้ User มีสิทธิ์แค่ SELECT อย่าใช้ Root User เด็ดขาด

Operation 1: Execute Query — รัน SQL ตามต้องการ

MySQL Node ใน n8n มี Operation หลักคือ Execute Query ที่ให้เขียน SQL ได้อย่างอิสระ เหมาะสำหรับ Query ที่ซับซ้อน

ตัวอย่าง: ดึงออร์เดอร์ที่สถานะเป็น “pending” ใน 24 ชั่วโมงที่ผ่านมา

SELECT order_id, customer_name, total_amount, created_at
FROM orders
WHERE status = 'pending'
  AND created_at >= NOW() - INTERVAL 24 HOUR
ORDER BY created_at DESC

ผลลัพธ์จาก Query จะถูกส่งออกเป็น Items ใน n8n โดยแต่ละ Row กลายเป็น 1 Item ที่นำไปใช้ต่อใน Node ถัดไปได้ทันที

Operation 2: Insert — เพิ่มข้อมูลใหม่

ใช้ INSERT INTO ใน Execute Query โดยใส่ค่าจาก Node ก่อนหน้าผ่าน Expression

ตัวอย่าง: บันทึก Lead ที่รับมาจาก Webhook

INSERT INTO leads (name, email, phone, source, created_at)
VALUES (
  '{{ $json.name }}',
  '{{ $json.email }}',
  '{{ $json.phone }}',
  '{{ $json.source }}',
  NOW()
)

ถ้าต้องการดึง ID ของ Row ที่เพิ่งสร้างออกมาใช้ต่อ ให้เพิ่ม Query นี้ต่อท้ายหรือใช้ LAST_INSERT_ID()

Operation 3: Update — แก้ไขข้อมูลที่มีอยู่

ตัวอย่าง: อัปเดตสถานะออร์เดอร์หลังจากชำระเงิน

UPDATE orders
SET status = 'paid', paid_at = NOW()
WHERE order_id = {{ $json.order_id }}

ควรระวังเรื่อง SQL Injection เมื่อใช้ค่าจาก User Input โดยตรง n8n รองรับ Parameterized Query ที่ปลอดภัยกว่า ให้ใช้ $1, $2 แทนการแทรกค่าตรงๆ (ขึ้นอยู่กับ n8n version)

Operation 4: Delete — ลบข้อมูล

ตัวอย่าง: ลบ Session ที่หมดอายุแล้ว

DELETE FROM user_sessions
WHERE expires_at < NOW()

ควรทดสอบด้วย SELECT ก่อนเสมอเพื่อตรวจสอบว่า WHERE Condition ถูกต้อง ก่อนเปลี่ยนเป็น DELETE

Workflow ตัวอย่าง: รายงานยอดขายรายวัน

นี่คือ Workflow ที่ทีมขายหลายแห่งใช้จริง

ขั้นตอนใน Workflow:

  1. Schedule Trigger — ตั้งให้รันทุกวัน 8:00 น.
  2. MySQL Node — ดึงยอดขายเมื่อวาน
    SELECT 
      COUNT(*) as total_orders,
      SUM(total_amount) as total_revenue,
      AVG(total_amount) as avg_order_value
    FROM orders
    WHERE DATE(created_at) = DATE(NOW() - INTERVAL 1 DAY)
      AND status = 'completed'
  3. Set Node — จัดรูปแบบข้อมูลให้อ่านง่าย
  4. LINE Notify Node หรือ Email Node — ส่งสรุปยอดขายให้ทีม

เทคนิค: ใช้ Loop กับ MySQL อย่างถูกวิธี

ถ้า Workflow ต้องประมวลผล Record จำนวนมาก เช่น อ่านลูกค้า 500 คนแล้วส่งอีเมลทีละคน ควรใช้ Loop Over Items Node และตั้ง Batch Size ให้เหมาะสม (แนะนำ 10-50) เพื่อไม่ให้ MySQL รับ Connection มากเกินไปพร้อมกัน

ไม่แนะนำ: วน Loop แล้ว Query MySQL ทีละ Row แนะนำ: ดึงข้อมูลทั้งหมดมาในครั้งเดียว แล้ว Loop ประมวลผลในหน่วยความจำของ n8n

แก้ปัญหาที่พบบ่อย

ปัญหา: Connection Refused ตรวจสอบว่า MySQL Server อนุญาตให้ IP ของ n8n เชื่อมต่อได้ ถ้า n8n อยู่บน Cloud ต้องเปิด Port 3306 ใน Firewall และตรวจสอบ bind-address ใน MySQL Config

ปัญหา: Character Encoding ภาษาไทยแสดงผิด ตรวจสอบให้แน่ใจว่า Database และ Table ใช้ Charset utf8mb4 และ Collation utf8mb4_unicode_ci

ปัญหา: Query Timeout ถ้า Query ใช้เวลานานเกินไป ตรวจสอบว่า Column ที่ใช้ใน WHERE มี Index แล้วหรือยัง การเพิ่ม Index ช่วยลดเวลา Query ได้อย่างมาก

ปัญหา: Too Many Connections ลด Concurrency ของ Workflow หรือเพิ่ม Connection Pool Size ใน MySQL Config เป็น Limit ที่ Server รองรับได้

อยากเรียน n8n แบบเป็นระบบ ตั้งแต่เริ่มต้นจนสร้าง Workflow ใช้งานจริงได้ ลองดู คอร์สสอน n8n ที่ aiunlock.co

Related posts