Operasi CRUD pertama dengan Drizzle ORM: insert satu & multiple rows, select semua & dengan where clause, update data dengan condition, delete data, serta return data dari insert/update/delete menggunakan returning() untuk PostgreSQL.

Setelah di episode 4 kita mempelajari Schema Definition — membuat tabel, tipe data, column modifiers, dan foreign key — pada episode ini kita melakukan operasi CRUD pertama: insert, select, update, dan delete. Ini adalah fondasi interaksi dengan database.
Drizzle ORM menggunakan query builder yang mirip SQL — kalian yang sudah menguasai SQL akan langsung merasa familiar.
import { users } from './schema'
await db.insert(users).values({
name: 'John Doe',
email: 'john@example.com',
age: 25,
})await db.insert(users).values([
{ name: 'John Doe', email: 'john@example.com', age: 25 },
{ name: 'Jane Smith', email: 'jane@example.com', age: 30 },
{ name: 'Bob Wilson', email: 'bob@example.com', age: 35 },
])Insert multiple sekaligus lebih efisien — satu round-trip ke database dibanding tiga.
const [newUser] = await db.insert(users).values({
name: 'John Doe',
email: 'john@example.com',
}).returning()
console.log(newUser.id) // 1 (auto-generated)returning() hanya tersedia di PostgreSQL. Untuk MySQL/SQLite, gunakan lastInsertRowid atau query terpisah.
const allUsers = await db.select().from(users)import { eq, gt, and } from 'drizzle-orm'
// Where equality
const user = await db.select().from(users).where(eq(users.id, 1))
// Where greater than
const adults = await db.select().from(users).where(gt(users.age, 18))
// Where compound
const activeAdults = await db.select().from(users).where(
and(eq(users.isActive, true), gt(users.age, 18))
)const names = await db.select({
name: users.name,
email: users.email,
}).from(users)await db.update(users)
.set({ name: 'Jane Doe', age: 31 })
.where(eq(users.id, 1))
// Return updated data (PostgreSQL)
const [updated] = await db.update(users)
.set({ name: 'Jane Doe' })
.where(eq(users.id, 1))
.returning()await db.delete(users).where(eq(users.id, 1))
// Return deleted data (PostgreSQL)
const [deleted] = await db.delete(users)
.where(eq(users.id, 1))
.returning()| Operasi | Method | Contoh |
|---|---|---|
| Insert | db.insert().values() | db.insert(users).values({...}) |
| Select | db.select().from() | db.select().from(users).where(...) |
| Update | db.update().set() | db.update(users).set({...}).where(...) |
| Delete | db.delete() | db.delete(users).where(...) |
Note
Semua operasi CRUD bersifat asynchronous — gunakan await di setiap query. Jika menggunakan TypeScript, type inference otomatis menentukan type result dari schema definition.
Pada episode 5 ini, kalian telah memahami operasi CRUD dasar:
returning() untuk PostgreSQL.await.Di episode 6 selanjutnya kita akan mempelajari Advanced Select: Filtering, Sorting & Pagination — operators (eq, ne, gt, lt), sorting, aggregations, group by, dan SQL template literals. Sampai jumpa di episode 6!