go - unique_index 和 unique 有什么区别?

标签 go go-gorm

在GORM中unique_index和unique有什么区别?
我正在使用 MySQL 8.0,我找不到关于 unique_index 和 unique form 手册之间区别的描述。
来自 here ,请具体查看 EmailMemberNumber 字段:

Declaring Models

Models are usually just normal Golang structs, basic Go types, or pointers of them. sql.Scanner and driver.Valuer interfaces are also supported.

Model Example:

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没有区别。

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

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

关于go - unique_index 和 unique 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611325/

相关文章:

json - 以字符串形式获取请求主体的JSON表示形式

sql - 迁移后,gorm关系不会出现在数据库中

http - 上下文不超时

mysql - 尝试从模型创建表时出错

go - 访问多对多表数据

去监听已经在使用的端口不返回错误

synchronization - Java synchronized() block 的 golang 等价物是什么?

go - 无法将类型字符串用作 sql.NullString

go - gorm 为什么不在日志中报告插入错误?

postgresql - []使用Gorm和Postgres转换为jsonb的字符串