使用迁移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
则跳过创建,否则如果表已经存在则抛出错误。 默认false
createForeignKeys
- 指示是否将在创建表时创建外键。 默认为true
createIndices
- 指示是否将在创建表时创建索引。 默认为true
创建一个新表。
dropTable(table: Table|string, ifExist?: boolean, dropForeignKeys?: boolean, dropIndices?: boolean): Promise<void>
table
- 要删除的表对象或表名ifExist
- 如果true
则跳过,否则抛出错误,如果表不存在则抛出错误dropForeignKeys
- 表示删除表时是否删除外键。 默认为true
dropIndices
- 指示删除表时是否删除索引。 默认为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
和downQueries
squls 数组的SqlInMemory
对象
获取存储在内存中的 sql。 sql 中的参数已被替换。
executeMemoryUpSql(): Promise<void>
执行内存中的 SQL 查询。
executeMemoryDownSql(): Promise<void>
执行内存中的 SQL 查询。