- 使用迁移API编写迁移
使用迁移API编写迁移
为了使用 API 来更改数据库架构,你可以使用QueryRunner。
例如:
import { MigrationInterface, QueryRunner, Table, TableIndex, TableColumn, TableForeignKey } from "typeorm";export class QuestionRefactoringTIMESTAMP implements MigrationInterface {async up(queryRunner: QueryRunner): Promise<any> {await queryRunner.createTable(new Table({name: "question",columns: [{name: "id",type: "int",isPrimary: true},{name: "name",type: "varchar"}]}),true);await queryRunner.createIndex("question",new TableIndex({name: "IDX_QUESTION_NAME",columnNames: ["name"]}));await queryRunner.createTable(new Table({name: "answer",columns: [{name: "id",type: "int",isPrimary: true},{name: "name",type: "varchar"}]}),true);await queryRunner.addColumn("answer",new TableColumn({name: "questionId",type: "int"}));await queryRunner.createForeignKey("answer",new TableForeignKey({columnNames: ["questionId"],referencedColumnNames: ["id"],referencedTableName: "question",onDelete: "CASCADE"}));}async down(queryRunner: QueryRunner): Promise<any> {const table = await queryRunner.getTable("question");const foreignKey = table.foreignKeys.find(fk => fk.columnNames.indexOf("questionId") !== -1);await queryRunner.dropForeignKey("question", foreignKey);await queryRunner.dropColumn("question", "questionId");await queryRunner.dropTable("answer");await queryRunner.dropIndex("question", "IDX_QUESTION_NAME");await queryRunner.dropTable("question");}}
getDatabases(): Promise<string[]>
返回所有可用的数据库名称,包括系统数据库。
getSchemas(database?: string): Promise<string[]>
database- 如果指定了 database 参数,则返回该数据库的模式
返回所有可用的模式名称,包括系统模式。 仅对 SQLServer 和 Postgres 有用。
getTable(tableName: string): Promise<Table|undefined>
tableName-要加载的表的名称
从数据库中按给定名称加载表。
getTables(tableNames: string[]): Promise<Table[]>
tableNames- 要加载的表的名称
从数据库中按给定名称加载表。
hasDatabase(database: string): Promise<boolean>
database- 要检查的数据库的名称
检查是否存在具有给定名称的数据库。
hasSchema(schema: string): Promise<boolean>
schema- 要检查的模式的名称
检查是否存在具有给定名称的模式。 仅用于 SqlServer 和 Postgres。
hasTable(table: Table|string): Promise<boolean>
table- 表对象或名称
检查表是否存在。
hasColumn(table: Table|string, columnName: string): Promise<boolean>
table- 表对象或名称columnName- 要检查的列的名称
检查表中是否存在列。
createDatabase(database: string, ifNotExist?: boolean): Promise<void>
database- 数据库名称ifNotExist- 如果为’true`则跳过创建,否则如果数据库已存在则抛出错误
创建一个新数据库。
dropDatabase(database: string, ifExist?: boolean): Promise<void>
database- 数据库名称ifExist- 如果为true则跳过删除,否则如果找不到数据库则抛出错误
删除数据库。
createSchema(schemaPath: string, ifNotExist?: boolean): Promise<void>
schemaPath- 架构名称。 对于 SqlServer,可以接受模式路径(例如’dbName.schemaName’)作为参数。 如果传递了架构路径,它将在指定的数据库中创建架构ifNotExist- 如果为true则跳过创建,否则如果 schema 已存在则抛出错误
创建一个新的表模式。
dropSchema(schemaPath: string, ifExist?: boolean, isCascade?: boolean): Promise<void>
schemaPath- 架构名称。 对于 SqlServer,可以接受模式路径(例如’dbName.schemaName’)作为参数。 如果传递了架构路径,它将删除指定数据库中的架构ifExist- 如果为true则跳过删除,否则如果找不到模式则抛出错误isCascade- 如果为true,则自动删除模式中包含的对象(表,函数等)。仅在 Postgres 中使用。
删除表架构。
createTable(table: Table, ifNotExist?: boolean, createForeignKeys?: boolean, createIndices?: boolean): Promise<void>
table- 表对象。ifNotExist- 如果true则跳过创建,否则如果表已经存在则抛出错误。 默认falsecreateForeignKeys- 指示是否将在创建表时创建外键。 默认为truecreateIndices- 指示是否将在创建表时创建索引。 默认为true
创建一个新表。
dropTable(table: Table|string, ifExist?: boolean, dropForeignKeys?: boolean, dropIndices?: boolean): Promise<void>
table- 要删除的表对象或表名ifExist- 如果true则跳过,否则抛出错误,如果表不存在则抛出错误dropForeignKeys- 表示删除表时是否删除外键。 默认为truedropIndices- 指示删除表时是否删除索引。 默认为true
删除一张表。
renameTable(oldTableOrName: Table|string, newTableName: string): Promise<void>
oldTableOrName- 旧的表对象或要重命名的名称newTableName- 新表名
重命名一张表。
addColumn(table: Table|string, column: TableColumn): Promise<void>
table- 表对象或名称column- 新列
添加一个新列。
addColumns(table: Table|string, columns: TableColumn[]): Promise<void>
table- 表对象或名称columns- 新列
添加一个新列。
renameColumn(table: Table|string, oldColumnOrName: TableColumn|string, newColumnOrName: TableColumn|string): Promise<void>
table- 表对象或名称oldColumnOrName- 旧列。接受 TableColumn 对象或列名称newColumnOrName- 新列。接受 TableColumn 对象或列名称
重命名一列。
changeColumn(table: Table|string, oldColumn: TableColumn|string, newColumn: TableColumn): Promise<void>
table- 表对象或名称oldColumn- 旧列。 接受 TableColumn 对象或列名称newColumn- 新列。 接受 TableColumn 对象
更改表中的列。
changeColumns(table: Table|string, changedColumns: { oldColumn: TableColumn, newColumn: TableColumn }[]): Promise<void>
table- 表对象或名称changedColumns- 更改列的数组oldColumn- 旧的 TableColumn 对象newColumn- 新的 TableColumn 对象
更改表中的列。
dropColumn(table: Table|string, column: TableColumn|string): Promise<void>
table- 表对象或名称column- 要删除的 TableColumn 对象或列名称
删除表中的列。
dropColumns(table: Table|string, columns: TableColumn[]): Promise<void>
table- 表对象或名称columns- 要删除的 TableColumn 对象数组
删除表中的列。
createPrimaryKey(table: Table|string, columnNames: string[]): Promise<void>
table- 表对象或名称columnNames- 列名称的数组将是主要的
创建一个新的主键。
updatePrimaryKeys(table: Table|string, columns: TableColumn[]): Promise<void>
table- 表对象或名称columns- 将更新的 TableColumn 对象数组
更新复合主键。
dropPrimaryKey(table: Table|string): Promise<void>
table- 表对象或名称
删除主键。
createUniqueConstraint(table: Table|string, uniqueConstraint: TableUnique): Promise<void>
table- 表对象或名称uniqueConstraint- 要创建的 TableUnique 对象
创建新的唯一约束。
注意:不适用于 MySQL,因为 MySQL 将唯一约束存储为唯一索引。 请改用
createIndex()方法。
createUniqueConstraints(table: Table|string, uniqueConstraints: TableUnique[]): Promise<void>
table- 表对象或名称uniqueConstraints- 表对象或名称
创建新的唯一约束。
注意:不适用于 MySQL,因为 MySQL 将唯一约束存储为唯一索引。 请改用
createIndices()方法。
dropUniqueConstraint(table: Table|string, uniqueOrName: TableUnique|string): Promise<void>
table- 表对象或名称uniqueOrName- 要删除的 TableUnique 对象或唯一约束名称
删除一个唯一约束。
注意:不适用于 MySQL,因为 MySQL 将唯一约束存储为唯一索引。 请改用
dropIndex()方法。
dropUniqueConstraints(table: Table|string, uniqueConstraints: TableUnique[]): Promise<void>
table- 表对象或名称uniqueConstraints- 要删除的 TableUnique 对象的数组
删除一个唯一约束。
注意:不适用于 MySQL,因为 MySQL 将唯一约束存储为唯一索引。 请改用
dropIndices()方法。
createCheckConstraint(table: Table|string, checkConstraint: TableCheck): Promise<void>
table- 表对象或名称checkConstraint- TableCheck 对象
创建新的检查约束。
注意:MySQL 不支持检查约束。
createCheckConstraints(table: Table|string, checkConstraints: TableCheck[]): Promise<void>
table- 表对象或名称checkConstraints- TableCheck 对象的数组
创建新的检查约束。
注意:MySQL 不支持检查约束。
dropCheckConstraint(table: Table|string, checkOrName: TableCheck|string): Promise<void>
table- 表对象或名称checkOrName- TableCheck 对象或检查约束名称
删除检查约束。
注意:MySQL 不支持检查约束。
dropCheckConstraints(table: Table|string, checkConstraints: TableCheck[]): Promise<void>
table- 表对象或名称checkConstraints- TableCheck 对象的数组
删除检查约束。
注意:MySQL 不支持检查约束。
createForeignKey(table: Table|string, foreignKey: TableForeignKey): Promise<void>
table- 表对象或名称foreignKey- TableForeignKey 对象
创建一个新的外键。
createForeignKeys(table: Table|string, foreignKeys: TableForeignKey[]): Promise<void>
table- 表对象或名称foreignKeys- TableForeignKey 对象的数组
创建一个新的外键。
dropForeignKey(table: Table|string, foreignKeyOrName: TableForeignKey|string): Promise<void>
table- 表对象或名称foreignKeyOrName- TableForeignKey 对象或外键名称
删除一个外键。
dropForeignKeys(table: Table|string, foreignKeys: TableForeignKey[]): Promise<void>
table- 表对象或名称foreignKeys- TableForeignKey 对象的数组
删除一个外键。
createIndex(table: Table|string, index: TableIndex): Promise<void>
table- 表对象或名称index- TableIndex 对象
创建一个新索引。
createIndices(table: Table|string, indices: TableIndex[]): Promise<void>
table- 表对象或名称indices- TableIndex 对象的数组
创建一个新索引。
dropIndex(table: Table|string, index: TableIndex|string): Promise<void>
table- 表对象或名称index- TableIndex 对象或索引名称
删除索引。
dropIndices(table: Table|string, indices: TableIndex[]): Promise<void>
table- 表对象或名称indices- TableIndex 对象的数组
删除指数。
clearTable(tableName: string): Promise<void>
tableName- 表明
清除所有表内容。
注意:此操作使用 SQL 的 TRUNCATE 查询,该查询无法在事务中恢复。
enableSqlMemory(): void
启用特殊查询运行程序模式,其中不执行 sql 查询,而是将它们存储到查询运行程序内的特殊变量中。
你可以使用getMemorySql()方法获得内存中的 sql。
disableSqlMemory(): void
禁用不执行 sql 查询的特殊查询运行程序模式。 以前存储的 sql 将被刷新。
clearSqlMemory(): void
刷新所有内存中的 sqls。
getMemorySql(): SqlInMemory
- 返回带有
upQueries和downQueriessquls 数组的SqlInMemory对象
获取存储在内存中的 sql。 sql 中的参数已被替换。
executeMemoryUpSql(): Promise<void>
执行内存中的 SQL 查询。
executeMemoryDownSql(): Promise<void>
执行内存中的 SQL 查询。
