【问题标题】:Using Unqiue keys in mysql - Sequelize在 mysql 中使用唯一键 - Sequelize
【发布时间】:2025-12-04 23:10:01
【问题描述】:

我的表模型名为“联系人”:

var Contact = sequelize.define('contact', {
  userKey: Sequelize.STRING,
  gsm: {
      type: Sequelize.STRING,
      unique: true,
      required: true
  },
  firstName: Sequelize.STRING,
  lastName: Sequelize.STRING,
)}

例如,如果用户登录并通过表单发布数据作为输入: userKey, gsm , firstname, lastname 像这样 1234,mohamed,sameer,KKKK(userKey 来自他的 loginSession)

我使用 userKey 将这些数据存储在 mysql 中 所以如果用户再次添加相同的 gsm ,

它会提醒 gsm 必须是唯一的

但我的问题是,如果具有不同 userKey 的用户进入应用程序并发布数据,他想添加另一个用户添加的相同 gsm。

PS:只有一张表叫Contact

是否可以使用复合键或sequelize Hooks?

我的 api.js:

exports.addNewContact = function (req, res) {
    var newcontact = {
        userKey: req.user.userKey, (// coming from login user session key)
        gsm: req.body.gsm,
        firstName: req.body.firstName,
        lastName: req.body.lastName,
    }
     Contact.create(newcontact).then(function (data){
        return res.status(200).send(data);
    }).catch(Sequelize.ValidationError, function (err) {
        return res.status(422).send(err.errors[0].message);
    }).catch(function (err) {
        return res.status(400).send(err.message);
    });

【问题讨论】:

  • 请查看here示例

标签: javascript mysql composite-key unique-key


【解决方案1】:

终于得到答案了:

我改变了我的模型看起来像这样:

var Contact = sequelize.define('contact', {
    userKey: Sequelize.STRING,
    role: Sequelize.STRING,
    gsm: {
        type: Sequelize.STRING,
        required: true
    },
    firstName: Sequelize.STRING,
    lastName: Sequelize.STRING
}, {
    indexes: [{
        unique: true,
        fields: ['userKey', 'gsm']
    }]
})

参考:https://*.com/a/42199137/7862193

【讨论】: