Knex.js Cheatsheet - Knex SQL Query Builder Reference

Knex.js SQL 查询构建器必备 API 都在这里了,从增删改查到事务管理,按功能分类整理,写 Node.js 数据库代码时直接复制。

Databases·50 commands·Last updated 2026-07-21
Back to Databases

查询数据 10

knex("users").select("*")
SELECT * FROM users
knex("users").select("name", "email")
查询指定列
knex("users").where("age", ">", 18)
WHERE age > 18
knex("users").where({ status: "active" })
WHERE status = active
knex("users").whereNull("deleted_at")
WHERE deleted_at IS NULL
knex("users").orderBy("created_at", "desc")
ORDER BY created_at DESC
knex("users").limit(10).offset(20)
LIMIT 10 OFFSET 20 分页
knex("users").first()
取第一条记录
knex("users").pluck("id")
取单列值数组 [1, 2, 3]
knex("users").distinct("country")
SELECT DISTINCT country

插入数据 5

knex("users").insert({ name: "John", email: "john@example.com" })
插入单条
knex("users").insert([{ name: "A" }, { name: "B" }])
批量插入
knex("users").insert(data).returning("id")
插入并返回 ID(PG/SQLite)
knex("users").insert(data).onConflict("email").merge()
冲突时更新(upsert)
knex("users").insert(data).onConflict("email").ignore()
冲突时忽略

更新与删除 5

knex("users").where("id", 1).update({ name: "Jane" })
更新指定记录
knex("users").where("id", 1).update({ views: knex.raw("views + 1") })
自增更新
knex("users").where("id", 1).update({ deleted_at: knex.fn.now() })
软删除模式
knex("users").where("id", 1).del()
删除指定记录
knex("users").truncate()
清空表(重置自增)

Join 关联 6

knex("users").join("posts", "users.id", "posts.user_id")
INNER JOIN
knex("users").leftJoin("posts", "users.id", "posts.user_id")
LEFT JOIN
knex("users").rightJoin("posts", "users.id", "posts.user_id")
RIGHT JOIN
knex("users").fullOuterJoin("posts", "users.id", "posts.user_id")
FULL OUTER JOIN
knex("users").crossJoin("posts")
CROSS JOIN 笛卡尔积
knex("users").join("posts", function() { this.on("users.id", "=", "posts.user_id").andOn("users.active", "=", knex.raw("?", [1])) })
多条件 JOIN

聚合与分组 8

knex("users").count("id as total")
COUNT(id) AS total
knex("users").count("* as total").first()
取总记录数
knex("orders").sum("amount")
SUM(amount)
knex("users").max("age")
MAX(age)
knex("users").min("age")
MIN(age)
knex("orders").avg("amount")
AVG(amount)
knex("users").groupBy("status")
GROUP BY status
knex("users").groupBy("status").having(knex.raw("count(*) > ?", [5]))
HAVING count > 5

事务 4

knex.transaction(async (trx) => { await trx("users").insert(data) })
自动提交/回滚事务
const trx = await knex.transaction(); await trx.commit() / trx.rollback()
手动控制事务
const sp = await trx.savepoint(async (sp) => { /* ... */ })
保存点(部分回滚)
await knex.transaction(cb, { isolationLevel: "read committed" })
设置事务隔离级别

Schema 构建 7

knex.schema.createTable("users", (t) => { t.increments("id"); t.string("name") })
创建表
knex.schema.dropTableIfExists("users")
删除表(如存在)
knex.schema.alterTable("users", (t) => { t.string("email") })
修改表结构
t.integer("age").unsigned().notNullable().defaultTo(0)
列约束链式调用
t.timestamps(true, true)
添加 created_at/updated_at
knex.schema.table("users", (t) => { t.index(["name", "status"]) })
创建复合索引
knex.schema.table("users", (t) => { t.unique("email") })
添加唯一约束

原始查询与调试 5

knex.raw("SELECT * FROM users WHERE id = ?", [1])
执行原生 SQL(参数化)
knex("users").where("active", true).debug(true)
输出查询 SQL 到控制台
knex("users").where("id", 1).toSQL().toNative()
查看生成的 SQL 和绑定值
knex("users").where("id", 1).toString()
返回 SQL 字符串
knex("users").columnInfo()
获取表结构信息

💡 Tips

  • Knex 支持 PostgreSQL、MySQL、MariaDB、SQLite、MSSQL,连接时指定 client。
  • 查询构建器返回 Promise,需要 await 或 .then() 才会执行。
  • knex.raw("SQL", bindings) 执行原生 SQL,参数绑定可防 SQL 注入。
  • Migration 用 knex.migrate.make() 创建,knex.migrate.latest() 执行迁移。
  • 连接池默认启用,配置 pool: { min: 2, max: 10 } 调整大小。