1. 数据库迁移

1.1. 自动迁移

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

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

db.AutoMigrate(&User{})

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

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

1.2. 其他数据库迁移工具

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

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

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

1.3. 表结构的方法

1.3.1. Has Table

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

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

1.3.2. Create Table

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

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

1.3.3. Drop table

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

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

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

1.3.4. ModifyColumn

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

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

1.3.5. DropColumn

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

1.3.6. 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")

1.3.7. Remove Index

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

1.3.8. Add Foreign Key

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

1.3.9. Remove ForeignKey

db.Model(&User{}).RemoveForeignKey("city_id", "cities(id)")

results matching ""

    No results matching ""