MySql-Sequalize-无法添加外键约束
我正在尝试使用NodeJSSequelize创建数据库。正在调用的命令是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
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修复,因为我正在使用数据库同步。