# Kysely คืออะไร? คู่มือ Type-Safe SQL Query Builder TypeScript ทดแทน Prisma
ในยุคที่ TypeScript กลายเป็นมาตรฐานของ backend development ปัญหาหลักของนักพัฒนา Next.js / Node.js ก็คือ จะเขียน SQL อย่างไรให้ปลอดภัย ตรวจ type ได้เต็มที่ และไม่ถูกล็อกอยู่กับ ORM ใหญ่ ๆ อย่าง Prisma ที่ผูกกับ schema-language ของตัวเอง
Kysely คือคำตอบของปัญหานี้ เป็น Type-Safe SQL Query Builder บริสุทธิ์ที่ไม่ใช่ ORM ใช้ TypeScript inference ทำให้ทุก query มี autocomplete, type checking และ refactor-safe โดยที่ runtime overhead แทบเป็นศูนย์
ในปี 2026 Kysely กำลังเป็นที่นิยมแทน Prisma ในโปรเจกต์ที่ต้องการความเร็ว ความยืดหยุ่น และความใกล้ชิดกับ SQL จริง บทความนี้จะอธิบายว่ามันคืออะไร เปรียบเทียบกับ Prisma / Drizzle และวิธีใช้งานจริงในระบบ SME ไทย
Kysely คืออะไร และต่างจาก ORM อย่างไร
Kysely เป็น query builder ไม่ใช่ ORM พูดง่าย ๆ คือ คุณยังเขียน SQL อยู่ แต่เขียนผ่าน TypeScript API ที่ inference type จาก database schema ของคุณ ทำให้ผิดที่ไหน TypeScript เตือนทันที
จุดเด่นหลักของ Kysely
เปรียบเทียบ Kysely vs Prisma vs Drizzle vs raw SQL
| คุณสมบัติ | Kysely | Prisma | Drizzle | Raw SQL |
|----------|--------|--------|---------|---------|
| Type Safety | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ |
| ใกล้ SQL จริง | สูง | ต่ำ | สูง | สูงสุด |
| Runtime overhead | ต่ำมาก | ปานกลาง | ต่ำมาก | ต่ำมาก |
| Code Generation | ไม่จำเป็น | จำเป็น | ไม่จำเป็น | ไม่จำเป็น |
| Multi-dialect | ✅ 4 dialects | ✅ มากกว่า | ✅ 5 dialects | ขึ้นกับ driver |
| Migration Tools | basic | เต็มรูปแบบ | basic | ต้องใช้เครื่องมือนอก |
| Edge runtime | ✅ | ❌ (ปัญหา WASM) | ✅ | ขึ้นกับ driver |
| Learning curve | ต่ำ | ปานกลาง | ต่ำ | ต่ำ (ถ้ารู้ SQL) |
สรุปการเลือก:
วิธีใช้ Kysely กับ Next.js 15 + PostgreSQL
Step 1: ติดตั้ง dependencies
\`npm i kysely pg\` และ devDependencies \`@types/pg kysely-codegen\`
Step 2: ประกาศ Database Schema
\`\`\`typescript
// db/types.ts
import { ColumnType, Generated } from 'kysely';
export interface UsersTable {
id: Generated<number>;
email: string;
name: string;
created_at: ColumnType<Date, string | undefined, never>;
}
export interface Database {
users: UsersTable;
orders: OrdersTable;
}
\`\`\`
หรือใช้ kysely-codegen เพื่อ generate type จาก database จริง
Step 3: สร้าง Db Instance
\`\`\`typescript
// db/index.ts
import { Kysely, PostgresDialect } from 'kysely';
import { Pool } from 'pg';
import type { Database } from './types';
export const db = new Kysely<Database>({
dialect: new PostgresDialect({
pool: new Pool({ connectionString: process.env.DATABASE_URL }),
}),
});
\`\`\`
Step 4: Query แบบ Type-Safe
\`\`\`typescript
const users = await db
.selectFrom('users')
.select(['id', 'email', 'name'])
.where('email', '=', email)
.executeTakeFirst();
const orderCount = await db
.selectFrom('orders')
.innerJoin('users', 'users.id', 'orders.user_id')
.select(({ fn }) => fn.countAll().as('total'))
.where('users.email', '=', email)
.executeTakeFirst();
\`\`\`
Step 5: Insert / Update / Transaction
\`\`\`typescript
await db.transaction().execute(async (trx) => {
const user = await trx.insertInto('users').values({...}).returningAll().executeTakeFirstOrThrow();
await trx.insertInto('orders').values({ user_id: user.id, ... }).execute();
});
\`\`\`
Use Cases ที่ Kysely โดดเด่น
| Use Case | ทำไม Kysely เหมาะ | ทางเลือก |
|----------|------------------|---------|
| Next.js App Router + Edge | bundle เล็ก รัน edge ได้ | Drizzle |
| ระบบ analytics / report SQL ซับซ้อน | API ใกล้ SQL จริง | Drizzle, raw SQL |
| Serverless Lambda | cold start ต่ำ | Drizzle |
| Migration จาก ORM อื่น | API ตรงกับ SQL ที่ทีมรู้อยู่แล้ว | Drizzle |
| Multi-tenant DB | dynamic table name ทำง่าย | Drizzle |
เทคนิคการใช้งานให้ได้ประโยชน์สูงสุด
ข้อจำกัดและข้อควรระวัง
สรุปและ Call to Action
Kysely ในปี 2026 เป็นทางเลือกที่สมดุลระหว่าง type safety, ประสิทธิภาพ และความยืดหยุ่นสำหรับโปรเจกต์ TypeScript backend โดยเฉพาะกับ Next.js, Lambda, และ edge runtime ที่ต้องการ bundle size เล็ก เหมาะกับทีมที่อยากเขียน SQL ใกล้กับของจริงโดยไม่เสีย DX (Developer Experience)
ถ้าทีมคุณกำลังสร้างระบบใหม่หรือ migrate จาก Prisma → Kysely ทีม ADS FIT ช่วย design schema, optimize query และวางสถาปัตยกรรม Edge-friendly ได้ — [ติดต่อเรา](/contact) หรืออ่านบทความที่เกี่ยวข้อง: Drizzle ORM, Prisma vs Kysely, pgvector, Better Auth, Zod, Bun Runtime ได้ที่ blog ของเรา
