Golang 创建表 PostgreSQL MySQL
API
要查看支持方法的完整列表,请参阅 CreateTableQuery.
db.NewCreateTable().
Model(&strct).
Table("table1"). // quotes table names
TableExpr("table1"). // arbitrary unsafe expression
ModelTableExpr("table1"). // overrides model table name
Temp().
IfNotExists().
Varchar(100). // turns VARCHAR into VARCHAR(100)
WithForeignKeys().
ForeignKey(`(fkey) REFERENCES table1 (pkey) ON DELETE CASCADE`).
PartitionBy("HASH (id)").
TableSpace("fasttablespace").
Exec(ctx)
示例
要创建表
_, err := db.NewCreateTable().
Model((*Book)(nil)).
ForeignKey(`("author_id") REFERENCES "users" ("id") ON DELETE CASCADE`).
Exec(ctx)
if err != nil {
panic(err)
}
ResetModel
Bun 提供 ResetModel
方法来快速删除和创建表
err := db.ResetModel(ctx, (*Model1)(nil), (*Model2)(nil))
DROP TABLE IF EXISTS model1 CASCADE;
CREATE TABLE model1 (...);
DROP TABLE IF EXISTS model2 CASCADE;
CREATE TABLE model2 (...);
钩子
您也可以从 bun.BeforeCreateTableHook
钩子修改查询。
var _ bun.BeforeCreateTableHook = (*Book)(nil)
func (*Book) BeforeCreateTable(ctx context.Context, query *bun.CreateTableQuery) error {
query.ForeignKey(`("author_id") REFERENCES "users" ("id") ON DELETE CASCADE`)
return nil
}
if _, err := db.NewCreateTable().Model((*Book)(nil)).Exec(ctx); err != nil {
panic(err)
}
要创建表上的索引,您可以使用 bun.AfterCreateTableHook
钩子
var _ bun.AfterCreateTableHook = (*Book)(nil)
func (*Book) AfterCreateTable(ctx context.Context, query *bun.CreateTableQuery) error {
_, err := query.DB().NewCreateIndex().
Model((*Book)(nil)).
Index("category_id_idx").
Column("category_id").
Exec(ctx)
return err
}
查看 示例 了解详情。