unique_index和unique之间有什么区别?

时间:2018-12-04 10:53:55

标签: go go-gorm

GORM中unique_index和unique之间有什么区别?
我正在使用MySQL 8.0,找不到关于unique_index和唯一表单手册之间差异的描述。
here中,专门查看EmailMemberNumber字段:

  

声明模型

     

模型通常只是普通的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
}

1 个答案:

答案 0 :(得分:3)

unique是一个数据库约束,在这种情况下,可以防止多个记录的MemberNumber具有相同的值。如果进行了这样的插入或更新,则该操作将不会成功并返回错误。

unique_index将创建一个数据库索引,该索引还可以确保两个值不能相同。它将执行相同的操作,但是会创建一个索引。

在您的情况下:当使用唯一约束时,MySQL将在幕后使用唯一索引。因此,使用MySQL时,使用uniqueunique index并没有区别。

如果使用其他数据库管理系统,则可能会有所不同。

差异(如果有)将由数据库管理系统在内部处理。出于实际目的,您可以将它们视为相同。差异将记录在每个数据库管理系统中。