Knex.js 是一个流行的 SQL 查询构建器,它支持多种数据库,并且提供了迁移(migrations)功能,用于管理数据库模式的变更。迁移文件允许你以版本控制的方式记录和应用数据库结构的变化。
迁移(Migration):是一段代码,用于描述数据库模式的变更。迁移可以是向上(up)或向下(down),分别对应于应用变更和撤销变更。
Knex.js:是一个 SQL 查询构建器,它提供了一个简单的 API 来构建和运行 SQL 查询,并且支持迁移、种子数据等功能。
npx knex init
这将创建一个 knexfile.js
文件,你可以在其中配置数据库连接。
npx knex migrate:make create_users_table
这将创建一个新的迁移文件,通常位于 migrations
目录下。
exports.up = function(knex) {
return knex.schema.createTable('users', function(table) {
table.increments('id').primary();
table.string('name').notNullable();
table.string('email').notNullable().unique();
table.timestamps(true, true);
});
};
exports.down = function(knex) {
return knex.schema.dropTable('users');
};
在这个例子中,up
方法创建了一个新的 users
表,而 down
方法则删除了这个表。
npx knex migrate:latest
这将运行所有未应用的迁移。
Knex 迁移是自动化的,但你需要确保:
问题:迁移运行失败,因为表已经存在。
原因:尝试创建一个已经存在的表。
解决方法:在运行迁移之前,检查表是否已经存在,并相应地处理。
exports.up = function(knex) {
return knex.schema.hasTable('users')
.then(exists => {
if (!exists) {
return knex.schema.createTable('users', function(table) {
table.increments('id').primary();
table.string('name').notNullable();
table.string('email').notNullable().unique();
table.timestamps(true, true);
});
}
});
};
exports.down = function(knex) {
return knex.schema.dropTableIfExists('users');
};
问题:迁移历史不一致。
原因:可能是由于手动修改数据库结构或迁移文件丢失导致的。
解决方法:使用 Knex 的 migrate:rollback
命令回滚到上一个稳定状态,并重新运行迁移。
npx knex migrate:rollback
npx knex migrate:latest
确保所有的迁移文件都得到了正确的版本控制和备份。
通过以上步骤和策略,你可以有效地使用 Knex.js 来管理数据库迁移,并确保现有数据库能够自动更新。
领取专属 10元无门槛券
手把手带您无忧上云