• 使用迁移API编写迁移

    使用迁移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 查询。