Mysql 如果仅提供值,请检查是否唯一

Mysql 如果仅提供值,请检查是否唯一,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我有一个users表,它由几个列组成,包括一个mobile number和email address列 我想让手机和电子邮件专栏都成为独一无二的 在一些用户不愿意提供电子邮件地址之前,我一直工作得很好 当电子邮件列为空时,将显示唯一键错误消息 只有在sequelize中为列提供了值时,才能使列唯一吗? 下面是我的用户模式的一段代码: const schema = sequelize.define("users", { id: { type: DataT

我有一个users表,它由几个列组成,包括一个mobile number和email address列

我想让手机和电子邮件专栏都成为独一无二的

在一些用户不愿意提供电子邮件地址之前,我一直工作得很好

当电子邮件列为空时,将显示唯一键错误消息

只有在sequelize中为列提供了值时,才能使列唯一吗?

下面是我的用户模式的一段代码:

const schema = sequelize.define("users", {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    name: {
        type: DataTypes.STRING,
    },
    email: {
        type: DataTypes.STRING,
        unique: {
            msg: "Email address is already registered"
        },
    },
    mobile: {
        type: DataTypes.STRING,
        unique: {
            msg: "Mobile number is already registered"
        },
    },

});

好吧,以你们实施的方式,这是不可能做到的。您需要了解,当您编写
unique
时,这意味着您的数据库将为该字段创建索引。因此,一旦在中有空字符串,下一个空字符串都会导致错误,因为它不是唯一的

处理这个问题的捷径是

  • 删除为字段指定
    NULL
    值的方法。实际上,在数据库中没有
    NULL
    值的情况下,它很容易工作
  • 强制用户输入
    电子邮件
    手机
  • 如果仍要使用该自定义逻辑,则需要在插入前在
    上定义一个
    触发器
    ,该触发器将执行行的自定义验证