自动迁移

使用 migrate 来维持你的表结构一直处于最新状态。

警告:migrate 仅支持创建表、增加表中没有的字段和索引。为了保护你的数据,它并不支持改变已有的字段类型或删除未被使用的字段

db.AutoMigrate(&User{})

db.AutoMigrate(&User{}, &Product{}, &Order{})

// 创建表的时候,添加表后缀
db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{})

其他数据库迁移工具

GORM 的数据库迁移工具能够支持主要的数据库,但是如果你要寻找更多的迁移工具, GORM 会提供的数据库接口,这可能可以给到你帮助。

// 返回 `*sql.DB`
db.DB()

参考 通用接口 以获得更多详细说明

表结构的方法

Has Table

// 检查模型中 User 表是否存在
db.HasTable(&User{})

// 检查 users 表是否存在
db.HasTable("users")

Create Table

// 通过模型 User 创建表
db.CreateTable(&User{})

// 在创建 users 表的时候,会在 SQL 语句中拼接上 `"ENGINE=InnoDB"`
db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})

Drop table

// 删除模型 User 表
db.DropTable(&User{})

// 删除 users 表
db.DropTable("users")

// 删除模型 User 表和 products 表
db.DropTableIfExists(&User{}, "products")

ModifyColumn

以给定的值来定义字段类型

// User 模型,改变 description 字段的数据类型为 `text`
db.Model(&User{}).ModifyColumn("description", "text")

DropColumn

// User 模型,删除  description 字段
db.Model(&User{}).DropColumn("description")

Add Indexes

// 为 `name` 字段建立一个名叫 `idx_user_name` 的索引
db.Model(&User{}).AddIndex("idx_user_name", "name")

// 为 `name`, `age` 字段建立一个名叫 `idx_user_name_age` 的索引
db.Model(&User{}).AddIndex("idx_user_name_age", "name", "age")

// 添加一条唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name", "name")

// 为多个字段添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name_age", "name", "age")

Remove Index

// 移除索引
db.Model(&User{}).RemoveIndex("idx_user_name")

Add Foreign Key

// 添加主键
// 第一个参数 : 主键的字段
// 第二个参数 : 目标表的 ID
// 第三个参数 : ONDELETE
// 第四个参数 : ONUPDATE
db.Model(&User{}).AddForeignKey("city_id", "cities(id)", "RESTRICT", "RESTRICT")

Remove ForeignKey

db.Model(&User{}).RemoveForeignKey("city_id", "cities(id)")
文档更新时间: 2020-06-02 13:11   作者:kuteng