使用迁移API编写迁移

为了使用 API 来更改数据库架构,你可以使用QueryRunner

例如:

  1. import { MigrationInterface, QueryRunner, Table, TableIndex, TableColumn, TableForeignKey } from "typeorm";
  2. export class QuestionRefactoringTIMESTAMP implements MigrationInterface {
  3. async up(queryRunner: QueryRunner): Promise<any> {
  4. await queryRunner.createTable(
  5. new Table({
  6. name: "question",
  7. columns: [
  8. {
  9. name: "id",
  10. type: "int",
  11. isPrimary: true
  12. },
  13. {
  14. name: "name",
  15. type: "varchar"
  16. }
  17. ]
  18. }),
  19. true
  20. );
  21. await queryRunner.createIndex(
  22. "question",
  23. new TableIndex({
  24. name: "IDX_QUESTION_NAME",
  25. columnNames: ["name"]
  26. })
  27. );
  28. await queryRunner.createTable(
  29. new Table({
  30. name: "answer",
  31. columns: [
  32. {
  33. name: "id",
  34. type: "int",
  35. isPrimary: true
  36. },
  37. {
  38. name: "name",
  39. type: "varchar"
  40. }
  41. ]
  42. }),
  43. true
  44. );
  45. await queryRunner.addColumn(
  46. "answer",
  47. new TableColumn({
  48. name: "questionId",
  49. type: "int"
  50. })
  51. );
  52. await queryRunner.createForeignKey(
  53. "answer",
  54. new TableForeignKey({
  55. columnNames: ["questionId"],
  56. referencedColumnNames: ["id"],
  57. referencedTableName: "question",
  58. onDelete: "CASCADE"
  59. })
  60. );
  61. }
  62. async down(queryRunner: QueryRunner): Promise<any> {
  63. const table = await queryRunner.getTable("question");
  64. const foreignKey = table.foreignKeys.find(fk => fk.columnNames.indexOf("questionId") !== -1);
  65. await queryRunner.dropForeignKey("question", foreignKey);
  66. await queryRunner.dropColumn("question", "questionId");
  67. await queryRunner.dropTable("answer");
  68. await queryRunner.dropIndex("question", "IDX_QUESTION_NAME");
  69. await queryRunner.dropTable("question");
  70. }
  71. }

  1. getDatabases(): Promise<string[]>

返回所有可用的数据库名称,包括系统数据库。


  1. getSchemas(database?: string): Promise<string[]>
  • database - 如果指定了 database 参数,则返回该数据库的模式

返回所有可用的模式名称,包括系统模式。 仅对 SQLServer 和 Postgres 有用。


  1. getTable(tableName: string): Promise<Table|undefined>
  • tableName -要加载的表的名称

从数据库中按给定名称加载表。


  1. getTables(tableNames: string[]): Promise<Table[]>
  • tableNames - 要加载的表的名称

从数据库中按给定名称加载表。


  1. hasDatabase(database: string): Promise<boolean>
  • database - 要检查的数据库的名称

检查是否存在具有给定名称的数据库。


  1. hasSchema(schema: string): Promise<boolean>
  • schema - 要检查的模式的名称

检查是否存在具有给定名称的模式。 仅用于 SqlServer 和 Postgres。


  1. hasTable(table: Table|string): Promise<boolean>
  • table - 表对象或名称

检查表是否存在。


  1. hasColumn(table: Table|string, columnName: string): Promise<boolean>
  • table - 表对象或名称
  • columnName - 要检查的列的名称

检查表中是否存在列。


  1. createDatabase(database: string, ifNotExist?: boolean): Promise<void>
  • database - 数据库名称
  • ifNotExist - 如果为’true`则跳过创建,否则如果数据库已存在则抛出错误

创建一个新数据库。


  1. dropDatabase(database: string, ifExist?: boolean): Promise<void>
  • database - 数据库名称
  • ifExist - 如果为true则跳过删除,否则如果找不到数据库则抛出错误

删除数据库。


  1. createSchema(schemaPath: string, ifNotExist?: boolean): Promise<void>
  • schemaPath - 架构名称。 对于 SqlServer,可以接受模式路径(例如’dbName.schemaName’)作为参数。 如果传递了架构路径,它将在指定的数据库中创建架构
  • ifNotExist - 如果为true则跳过创建,否则如果 schema 已存在则抛出错误

创建一个新的表模式。


  1. dropSchema(schemaPath: string, ifExist?: boolean, isCascade?: boolean): Promise<void>
  • schemaPath - 架构名称。 对于 SqlServer,可以接受模式路径(例如’dbName.schemaName’)作为参数。 如果传递了架构路径,它将删除指定数据库中的架构
  • ifExist - 如果为true则跳过删除,否则如果找不到模式则抛出错误
  • isCascade - 如果为true,则自动删除模式中包含的对象(表,函数等)。仅在 Postgres 中使用。

删除表架构。


  1. createTable(table: Table, ifNotExist?: boolean, createForeignKeys?: boolean, createIndices?: boolean): Promise<void>
  • table - 表对象。
  • ifNotExist - 如果true则跳过创建,否则如果表已经存在则抛出错误。 默认false
  • createForeignKeys - 指示是否将在创建表时创建外键。 默认为true
  • createIndices - 指示是否将在创建表时创建索引。 默认为true

创建一个新表。


  1. dropTable(table: Table|string, ifExist?: boolean, dropForeignKeys?: boolean, dropIndices?: boolean): Promise<void>
  • table - 要删除的表对象或表名
  • ifExist - 如果true则跳过,否则抛出错误,如果表不存在则抛出错误
  • dropForeignKeys - 表示删除表时是否删除外键。 默认为true
  • dropIndices - 指示删除表时是否删除索引。 默认为true

删除一张表。


  1. renameTable(oldTableOrName: Table|string, newTableName: string): Promise<void>
  • oldTableOrName - 旧的表对象或要重命名的名称
  • newTableName - 新表名

重命名一张表。


  1. addColumn(table: Table|string, column: TableColumn): Promise<void>
  • table - 表对象或名称
  • column - 新列

添加一个新列。


  1. addColumns(table: Table|string, columns: TableColumn[]): Promise<void>
  • table - 表对象或名称
  • columns - 新列

添加一个新列。


  1. renameColumn(table: Table|string, oldColumnOrName: TableColumn|string, newColumnOrName: TableColumn|string): Promise<void>
  • table - 表对象或名称
  • oldColumnOrName - 旧列。接受 TableColumn 对象或列名称
  • newColumnOrName - 新列。接受 TableColumn 对象或列名称

重命名一列。


  1. changeColumn(table: Table|string, oldColumn: TableColumn|string, newColumn: TableColumn): Promise<void>
  • table - 表对象或名称
  • oldColumn - 旧列。 接受 TableColumn 对象或列名称
  • newColumn - 新列。 接受 TableColumn 对象

更改表中的列。


  1. changeColumns(table: Table|string, changedColumns: { oldColumn: TableColumn, newColumn: TableColumn }[]): Promise<void>
  • table - 表对象或名称
  • changedColumns - 更改列的数组
    • oldColumn - 旧的 TableColumn 对象
    • newColumn - 新的 TableColumn 对象

更改表中的列。


  1. dropColumn(table: Table|string, column: TableColumn|string): Promise<void>
  • table - 表对象或名称
  • column - 要删除的 TableColumn 对象或列名称

删除表中的列。


  1. dropColumns(table: Table|string, columns: TableColumn[]): Promise<void>
  • table - 表对象或名称
  • columns - 要删除的 TableColumn 对象数组

删除表中的列。


  1. createPrimaryKey(table: Table|string, columnNames: string[]): Promise<void>
  • table - 表对象或名称
  • columnNames - 列名称的数组将是主要的

创建一个新的主键。


  1. updatePrimaryKeys(table: Table|string, columns: TableColumn[]): Promise<void>
  • table - 表对象或名称
  • columns - 将更新的 TableColumn 对象数组

更新复合主键。


  1. dropPrimaryKey(table: Table|string): Promise<void>
  • table - 表对象或名称

删除主键。


  1. createUniqueConstraint(table: Table|string, uniqueConstraint: TableUnique): Promise<void>
  • table - 表对象或名称
  • uniqueConstraint - 要创建的 TableUnique 对象

创建新的唯一约束。

注意:不适用于 MySQL,因为 MySQL 将唯一约束存储为唯一索引。 请改用createIndex()方法。


  1. createUniqueConstraints(table: Table|string, uniqueConstraints: TableUnique[]): Promise<void>
  • table - 表对象或名称
  • uniqueConstraints - 表对象或名称

创建新的唯一约束。

注意:不适用于 MySQL,因为 MySQL 将唯一约束存储为唯一索引。 请改用createIndices()方法。


  1. dropUniqueConstraint(table: Table|string, uniqueOrName: TableUnique|string): Promise<void>
  • table - 表对象或名称
  • uniqueOrName - 要删除的 TableUnique 对象或唯一约束名称

删除一个唯一约束。

注意:不适用于 MySQL,因为 MySQL 将唯一约束存储为唯一索引。 请改用dropIndex()方法。


  1. dropUniqueConstraints(table: Table|string, uniqueConstraints: TableUnique[]): Promise<void>
  • table - 表对象或名称
  • uniqueConstraints - 要删除的 TableUnique 对象的数组

删除一个唯一约束。

注意:不适用于 MySQL,因为 MySQL 将唯一约束存储为唯一索引。 请改用dropIndices()方法。


  1. createCheckConstraint(table: Table|string, checkConstraint: TableCheck): Promise<void>
  • table - 表对象或名称
  • checkConstraint - TableCheck 对象

创建新的检查约束。

注意:MySQL 不支持检查约束。


  1. createCheckConstraints(table: Table|string, checkConstraints: TableCheck[]): Promise<void>
  • table - 表对象或名称
  • checkConstraints - TableCheck 对象的数组

创建新的检查约束。

注意:MySQL 不支持检查约束。


  1. dropCheckConstraint(table: Table|string, checkOrName: TableCheck|string): Promise<void>
  • table - 表对象或名称
  • checkOrName - TableCheck 对象或检查约束名称

删除检查约束。

注意:MySQL 不支持检查约束。


  1. dropCheckConstraints(table: Table|string, checkConstraints: TableCheck[]): Promise<void>
  • table - 表对象或名称
  • checkConstraints - TableCheck 对象的数组

删除检查约束。

注意:MySQL 不支持检查约束。


  1. createForeignKey(table: Table|string, foreignKey: TableForeignKey): Promise<void>
  • table - 表对象或名称
  • foreignKey - TableForeignKey 对象

创建一个新的外键。


  1. createForeignKeys(table: Table|string, foreignKeys: TableForeignKey[]): Promise<void>
  • table - 表对象或名称
  • foreignKeys - TableForeignKey 对象的数组

创建一个新的外键。


  1. dropForeignKey(table: Table|string, foreignKeyOrName: TableForeignKey|string): Promise<void>
  • table - 表对象或名称
  • foreignKeyOrName - TableForeignKey 对象或外键名称

删除一个外键。


  1. dropForeignKeys(table: Table|string, foreignKeys: TableForeignKey[]): Promise<void>
  • table - 表对象或名称
  • foreignKeys - TableForeignKey 对象的数组

删除一个外键。


  1. createIndex(table: Table|string, index: TableIndex): Promise<void>
  • table - 表对象或名称
  • index - TableIndex 对象

创建一个新索引。


  1. createIndices(table: Table|string, indices: TableIndex[]): Promise<void>
  • table - 表对象或名称
  • indices - TableIndex 对象的数组

创建一个新索引。


  1. dropIndex(table: Table|string, index: TableIndex|string): Promise<void>
  • table - 表对象或名称
  • index - TableIndex 对象或索引名称

删除索引。


  1. dropIndices(table: Table|string, indices: TableIndex[]): Promise<void>
  • table - 表对象或名称
  • indices - TableIndex 对象的数组

删除指数。


  1. clearTable(tableName: string): Promise<void>
  • tableName - 表明

清除所有表内容。

注意:此操作使用 SQL 的 TRUNCATE 查询,该查询无法在事务中恢复。


  1. enableSqlMemory(): void

启用特殊查询运行程序模式,其中不执行 sql 查询,而是将它们存储到查询运行程序内的特殊变量中。

你可以使用getMemorySql()方法获得内存中的 sql。


  1. disableSqlMemory(): void

禁用不执行 sql 查询的特殊查询运行程序模式。 以前存储的 sql 将被刷新。


  1. clearSqlMemory(): void

刷新所有内存中的 sqls。


  1. getMemorySql(): SqlInMemory
  • 返回带有upQueriesdownQueriessquls 数组的SqlInMemory对象

获取存储在内存中的 sql。 sql 中的参数已被替换。


  1. executeMemoryUpSql(): Promise<void>

执行内存中的 SQL 查询。


  1. executeMemoryDownSql(): Promise<void>

执行内存中的 SQL 查询。