mysql - 如果仅提供值,则检查唯一性 sequelize

标签 mysql node.js sequelize.js

我有一个用户表,其中包含几列,包括手机号码和电子邮件地址列。
我想让 mobile 和 email 列都是 unique
我一直在完美工作,直到有些用户不想提供电子邮件地址。
当电子邮件列为空时,它会显示唯一键错误消息。
有没有办法使列唯一,只有在 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 值的情况下工作。
  • 强制用户输入 emailmobile

  • 如果仍然想要自定义逻辑,您需要在 trigger 上定义一个 BEFORE INSERT 来执行行的自定义验证。

    关于mysql - 如果仅提供值,则检查唯一性 sequelize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67482365/

    相关文章:

    node.js - 如何在不加载关联对象的情况下通过关联在sequelize中进行查询?

    mysql - 创建文件夹/文件结构

    MySQL - 删除一行并使用正确的排序 ID 对其他行重新排序

    php - Laravel:试图建立关系

    MySQLInstallerConsole 由于 "failing dependencies"突然失败

    javascript - 如何分离嵌套的异步函数并按所需顺序执行它们?

    node.js - NestJS、GraphQL、类验证器 - 在验证方法中访问请求对象

    javascript - 如何向多个 URL 发出请求并解析每个页面的结果?

    express - Sequelize Express 多个模型

    sql - 更改从 SQL Server 数据库获取的数据值