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