Knex 和 Schema 是什么?
Knex
- Knex.js 是一个 SQL 查询构建器(SQL Query Builder),运行在 Node.js 上。
- 它的主要作用是 用 JavaScript 来操作数据库,而不是手写 SQL。
- 支持多种数据库(MySQL、Postgres、SQLite、Oracle、MSSQL 等)。
你可以用 Knex 来做:
- 查询(select、insert、update、delete)
- 事务
- 迁移(migrations)
- Schema 定义(建表、改表)
Schema
-
Schema 在数据库里是 数据库结构的定义,包括:
- 数据库里的表(tables)
- 字段(columns)
- 数据类型(int、varchar、text、json 等)
- 主键、外键、索引、约束
举个例子,一个电商系统的 Schema 可能是:
- 用户表(users)
- 商品表(products)
- 订单表(orders)
- 订单与用户、商品的关系
在 Knex 里,Schema
指的是 Schema Builder(模式构建器),用来通过 JavaScript 定义数据库表结构。
示例:Knex + Schema
用 Knex 的 schema
创建一个用户表:
const knex = require('knex')({client: 'mysql2',connection: { host: '127.0.0.1', user: 'root', password: '123456', database: 'testdb' }
});// 创建 users 表
knex.schema.createTable('users', (table) => {table.increments('id').primary(); // 自增主键table.string('name', 100).notNullable(); // 用户名table.integer('age').defaultTo(18); // 年龄table.timestamps(true, true); // created_at & updated_at
})
.then(() => console.log('用户表已创建'))
.catch((err) => console.error(err));
这段代码相当于 SQL:
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT DEFAULT 18,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
总结
- Knex = 工具(帮你写 SQL、管理迁移、操作数据库)
- Schema = 数据库结构(表、字段、关系),在 Knex 里可以用 Schema Builder 定义
可以理解为:
- Knex 是“工人”
- Schema 是“设计图”
- 数据库是“工地”