首页 > 解决方案 > Sequelize uuid 的外键给出错误 1215

问题描述

给出以下迁移片段:

const uuid = require('uuid');
queryInterface.createTable('listings', {
        id: {
          type: Sequelize.UUID,
          defaultValue: () => uuid.v4(),
          primaryKey: true,
          allowNull: false,
          isUnique: true,
        },
});

还有一个:

queryInterface.createTable('listing_detail_info', {
        id: {
          type: Sequelize.INTEGER(11),
          primaryKey: true,
          autoIncrement: true,
          allowNull: false,
          isUnique: true,
        },
        listingId: {
          type: Sequelize.UUID,
          isUnique: true,
          allowNull: false,
          field: 'listing_id',
          references: { model: 'listings', key: 'id' },
        },
});

发生以下错误:

 code: 'ER_CANNOT_ADD_FOREIGN',
     errno: 1215,
     sqlState: 'HY000',
     sqlMessage: 'Cannot add foreign key constraint',
     sql:
      'CREATE TABLE IF NOT EXISTS `listing_detail_info` (`id` INTEGER(11) NOT NULL auto_increment , `listing_id` CHAR(36) BINARY NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`listing_id`) REFERENCES `listings` (`id`)) ENGINE=InnoDB;' },

我很确定它们是相同的数据类型(都是 Sequleize.UUID),并且之前的表已成功创建,但不知道为什么仍然会发生这种情况......

标签: mysqlnode.jssequelize.js

解决方案


试试这个

queryInterface.createTable('listing_detail_info', {
        id: {
          type: Sequelize.INTEGER(11),
          primaryKey: true,
          autoIncrement: true,
          allowNull: false,
          isUnique: true,
        },
        listingId: {
          type: Sequelize.UUID,
          isUnique: true,
          allowNull: false,
        },
});

如果给定的解决方案有效,则添加外键约束存在问题。


推荐阅读