GORM中unique_index和unique之间有什么区别?
我使用MySQL 8.0,我找不到unique_index和unique form manual之间差异的描述。
来自here,具体参见Email
和MemberNumber
字段:
Declaring Models
模型通常只是普通的Golang结构,基本Go类型或它们的指针。还支持sql.Scanner和driver.Valuer接口。
模型示例:
type User struct { gorm.Model Name string Age sql.NullInt64 Birthday *time.Time Email string `gorm:"type:varchar(100);unique_index"` Role string `gorm:"size:255"` // set field size to 255 MemberNumber *string `gorm:"unique;not null"` // set member number to unique and not null Num int `gorm:"AUTO_INCREMENT"` // set num to auto incrementable Address string `gorm:"index:addr"` // create index with name `addr` for address IgnoreMe int `gorm:"-"` // ignore this field }
unique
是一个数据库约束(在这种情况下)阻止多个记录具有相同的MemberNumber
值。如果进行了这样的插入或更新,则操作将不会成功并返回错误。
unique_index
将创建一个数据库索引,该索引还确保没有两个值可以相同。它也会这样做,但会创建一个索引。
在您的情况下:当使用唯一约束时,MySQL将在幕后使用唯一索引。所以当使用MySQL时,使用unique
和使用unique index
没有区别。
如果使用其他数据库管理系统,则可能存在差异。
差异(如果有的话)将由内部数据库管理系统处理。出于实际目的,您可以将它们视为相同。将记录每个数据库管理系统的差异。