【nest】TypeORM数据库迁移脚本配置
一、安装必要依赖
pnpm install --save @nestjs/typeorm typeorm mysql2
pnpm install dotenv -D二、创建配置文件
// src/config/typeorm.config.ts
import { config } from 'dotenv'
import { DataSource } from 'typeorm'
config()
const dataSource = new DataSource({
type: 'mysql',
host: process.env.DB_HOST || '127.0.0.1',
port: parseInt(process.env.DB_PORT!, 10) || 3306,
username: process.env.DB_USERNAME || 'root',
password: process.env.DB_PASSWORD || '',
database: process.env.DB_DATABASE || 'lin_db',
entities: [],
migrations: ['migrations/*.ts'], // 迁移文件路径
migrationsTableName: 'lin_migrations', // 迁移记录表
synchronize: false,
});
export default dataSource;三、创建迁移脚本
迁移命令
// 创建脚本
"migration:create": "typeorm-ts-node-commonjs migration:create",
// 指行脚本
"migration:run": "typeorm-ts-node-commonjs migration:run -d ./src/config/typeorm.config.ts",
// 回滚脚本:回滚最近一次的记录
"migration:revert": "typeorm-ts-node-commonjs migration:revert -d ./src/config/typeorm.config.ts",
// 显示脚本执行情况
"migration:show": "typeorm-ts-node-commonjs migration:show -d ./src/config/typeorm.config.ts"执行脚本
创建迁移脚本
pnpm run migration:create <path> :pnpm run migration:create migrations/init
执行如上脚本,会在根目录创建一个文件夹名为migrations ,并且在这个文件夹下会存在一个文件名为当前时间戳-init.ts的文件,如下所示,我们需要在这个文件内写迁移脚本:
import { MigrationInterface, QueryRunner } from 'typeorm';
export class Init1764684395382 implements MigrationInterface {
// 执行脚本
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`create table user(
id int primary key auto_increment,
username varchar(255) not null unique,
password varchar(255) not null,
create_time timestamp not null default current_timestamp,
update_time timestamp not null default current_timestamp on update current_timestamp,
)`);
}
// 回滚脚本
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`drop table user`);
}
}创建迁移脚本的另一种方法:
创建bash脚本bin/migration.sh :
#!/bin/bash
if [ -z "$1" ]; then
echo "错误:请提供迁移文件名称"
exit 1
fi
mkdir -p migrations
echo "正在创建迁移文件:$1"
pnpm run migration:create ./migrations/$1
echo "迁移文件创建完成!"给bin/migration.sh脚本赋予执行权限:
chmod +x bin/migration.sh执行命令bin/migration.sh <文件名> 创建迁移脚本
执行run命令
在创建完如上的迁移文件并且填充好了数据库执行命令之后,就可以执行pnpm run migration:run跑迁移脚本
执行revert命令
如果发现数据库迁移有问题,需要执行pnpm run migration:revert进行回滚
执行show命令
执行pnpm run migration:show命令可以查看执行迁移脚本的情况:
(base) liulin@liulindeMacBook-Pro lin-db-service % p migration:show
> lin-db-service@0.0.1 migration:show /Users/liulin/Desktop/lin-db-service
> typeorm-ts-node-commonjs migration:show -d ./src/config/typeorm.config.ts
[dotenv@17.2.3] injecting env (6) from .env -- tip: ⚙️ write to custom object with { processEnv: myObject }
[X] 2 Init1764684395382
[ ] User1764685303020总结
经过如上命令,就可以实现TypeORM数据库迁移。
许可协议:
CC BY 4.0