用途:Drizzle ORM 是面向 PostgreSQL、MySQL 和 SQLite 的轻量类型安全 TypeScript ORM,适合需要编译期类型安全并保留 SQL 级控制的场景;若需要自动迁移的完整 active-record ORM(如 Prisma)或使用 MongoDB/NoSQL,则不适合。
主要能力:用 pgTable 等定义 schema、列类型与索引约束,并用 typeof table.$inferSelect、$inferInsert 推导 TS 类型;提供 db.query 关系查询与 db.select().from().where() 类 SQL 链式查询;支持 insert/update/delete/upsert、db.transaction 事务(抛错自动回滚)、eq/and/or/inArray/sql 等过滤、relations 声明关系、视图与物化视图、生成列、check 约束、$count、预编译语句和批量 API。
使用方式:从 drizzle-orm/pg-core、mysql-core、sqlite-core 导入对应方言类型;给 drizzle() 传入 { schema } 以启用关系查询;用 drizzle-kit generate、migrate、push、pull、studio 管理迁移。drizzle-zod 可由表生成 Zod schema 做输入校验。部分能力可委派 tanstack-query、tanstack-start、electricsql、pglite 等技能。
限制与注意:insert/update 需链 .returning() 才能取回行;update/delete 必须带 .where() 避免全表操作;外键列需显式加索引;多表写入用事务;关系两侧都要声明;新 PostgreSQL schema 建议用 integer().generatedAlwaysAsIdentity() 而非 serial();findFirst 可能返回 undefined。