MySql-Sequalize-无法添加外键约束

MySql-Sequalize-无法添加外键约束,mysql,sql,database,sequelize.js,Mysql,Sql,Database,Sequelize.js,我正在尝试使用NodeJSSequelize创建数据库。正在调用的命令是 CREATE TABLE IF NOT EXISTS `wheel` (`id` INTEGER NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `shopId` VARCHAR(255), PRIMARY KEY (`id`), FOREIGN KEY (`shopId`) REFERENCE

我正在尝试使用NodeJSSequelize创建数据库。正在调用的命令是

CREATE TABLE IF NOT EXISTS `wheel` (`id` INTEGER NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `shopId` VARCHAR(255), PRIMARY KEY (`id`), 
FOREIGN KEY (`shopId`) REFERENCES `shop` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `segments` (`segmentID` VARCHAR(255) NOT NULL , `heading` VARCHAR(255) NOT NULL, `subHeading` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `wheelId` INTEGER, PRIMARY KEY (`segmentID`),
 FOREIGN KEY (`wheelId`) REFERENCES `wheel` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `shop` (`id` VARCHAR(255) NOT NULL , `accessToken` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
但是我得到了这个错误

未处理的拒绝SequelizeDatabaseError:ER\u无法添加\u外部: 无法添加外键约束

当我试图看到最后一个外键错误时,它说

------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-07-28 19:23:21 0x700000d95000 Error in foreign key constraint of table exitpopup/segments:
FOREIGN KEY (`wheelId`) REFERENCES `wheel` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB:
Cannot resolve table name close to:
 (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB
奇怪的是,当我把sql语句放在sql控制台中时,它工作了,并且没有任何错误。
我做错了什么?

订单需要更改。在创建
shop
表之前,您正在创建
wheel
表。但是,wheel指的是原始查询集中不存在的shop表。更改订单时,车间表已存在,因此不会发生错误

CREATE TABLE IF NOT EXISTS `shop` 
 (`id` VARCHAR(255) NOT NULL , `accessToken` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, 
 PRIMARY KEY (`id`)) ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS `wheel` 
(`id` INTEGER NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `shopId` VARCHAR(255), 
 PRIMARY KEY (`id`), 
 FOREIGN KEY (`shopId`) REFERENCES `shop` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `segments` 
(`segmentID` VARCHAR(255) NOT NULL , `heading` VARCHAR(255) NOT NULL, `subHeading` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `wheelId` INTEGER, 
 PRIMARY KEY (`segmentID`),
 FOREIGN KEY (`wheelId`) REFERENCES `wheel` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;

如果您需要关闭此检查,因为您要从另一个DB的转储导入一组表,则需要运行:

set FOREIGN_KEY_CHECKS=0
好像它是一个SQL语句。因此,在Sequelize中,我运行了:

let promise = sequelize.query("set FOREIGN_KEY_CHECKS=0");

外键和原始键之间的字符编码可能不同。检查您的模式。

这主要是因为以下两个原因

1。当主键数据类型和外键数据类型不匹配时。

return sequelize.define('Manager', {
    id: {
      type: DataTypes.INTEGER(11), // The data type defined here and 
      references: {
        model: 'User',
        key: 'id'
      }
    }
  }
)

return sequelize.define('User', {
    id: {
      type: DataTypes.INTEGER(11),  // This data type should be the same
    }
  }
)
return sequelize.define('User', {
        id: {
          primaryKey: true  
        },
        mail: {
            type: DataTypes.STRING(45),
            allowNull: false,
            primaryKey: true   // You should change this to 'unique:true'. you cant have two primary keys in one table. 
        }
    }
)
2。当引用的键不是主键或唯一键时。

return sequelize.define('Manager', {
    id: {
      type: DataTypes.INTEGER(11), // The data type defined here and 
      references: {
        model: 'User',
        key: 'id'
      }
    }
  }
)

return sequelize.define('User', {
    id: {
      type: DataTypes.INTEGER(11),  // This data type should be the same
    }
  }
)
return sequelize.define('User', {
        id: {
          primaryKey: true  
        },
        mail: {
            type: DataTypes.STRING(45),
            allowNull: false,
            primaryKey: true   // You should change this to 'unique:true'. you cant have two primary keys in one table. 
        }
    }
)

你在哪里添加的?@MendonAshwini刚刚创建表。这应该由Sequalize修复,因为我正在使用数据库同步。