могу ли я использовать идентификатор поля при последовательном запуске updateOnDuplicate nodejs

#mysql #node.js

#mysql #node.js

Вопрос:

моя таблица выглядит следующим образом user_roles

ID role_id идентификатор пользователя
1 1 1
2 2 1

и я попробовал с этим запросом raw json

 "roles": [
      {
          "id": 1,
          "role_id": 3, // update data
          "user_id": 1
      }
  ],
 

моя миграция

 await queryInterface.createTable('user_roles', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },```

# my controller


await user_role.bulkCreate(
      bulkRole,
      {
        updateOnDuplicate: ["role_id", "user_id", "id"],
        ignoreDuplicates: true,
        returning: true
      }
    ).then(async(result) => {
      console.log(`result ${result}`)
    }).catch(async(err) => {
      console.log(`result err ${err}`)
    });
 

но в журнале npm run dev я получил это

 INSERT IGNORE INTO `user_roles` (`role_id`,`user_id`,`created_at`,`updated_at`) 
VALUES (3,5,'2021-12-07 09:38:47','2021-12-07 09:38:47') 
ON DUPLICATE KEY UPDATE `role_id`=VALUES(`role_id`),`user_id`=VALUES(`user_id`);
 

id проверки нет, я хочу обновлять только с идентификатором, поэтому он хотел бы updateOnDuplicate: ["id"],

но снова возникает ошибка

 result err SequelizeDatabaseError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
 

в моей модели я не могу определить идентификатор

   user_role.init({
    // id: DataTypes.INTEGER, # if i enable the Error: A column called 'id' was added to the attributes of 'user_roles' but not marked with 'primaryKey: true' 
    role_id: DataTypes.INTEGER,
    user_id: DataTypes.INTEGER,
    delete_flag: DataTypes.INTEGER,
  }, {
    sequelize,
    modelName: 'user_role',
    underscored: true,
  });
 

также я пробовал с upsert

 const [record, created] = await user_role.upsert(
          {
            id: data.id, // You do still need to provide the id of the record you want to upsert or a new record will be created.
            user_id: data.user_id,
            role_id: data.role_id,
          }, // Record to upsert
          { returning: true }     // Return upserted record
        );
 

но всегда добавляются новые данные

ID role_id идентификатор пользователя
1 1 1
2 2 1
3 3 1

чего я ожидал, так это

ID role_id идентификатор пользователя
1 1 1
2 3 1

но из этих ссылок https://www.javatpoint.com/mysql-insert-on-duplicate-key-update я только что добавил updateOnDuplicate: ['role_id'] для изменения только role_id, но все равно вставил запись, которая не обновляется.