【发布时间】:2019-05-30 13:04:58
【问题描述】:
我是 Sequelize 的新手,我正在通过官方教程网站学习 (http://docs.sequelizejs.com/manual/tutorial/) 我在尝试教程中的代码时卡住了。
我试过的代码是这样的:
const City = sequelize.define('city', { countryCode: Sequelize.STRING });
const Country = sequelize.define('country', { isoCode: Sequelize.STRING });
Country.hasMany(City, {foreignKey: 'countryCode', sourceKey: 'isoCode'});
City.belongsTo(Country, {foreignKey: 'countryCode', targetKey: 'isoCode'});
sequelize.sync();
当我运行这段代码时,节点控制台给了我一个错误:
“未处理的拒绝 SequelizeDatabaseError: 无法添加外键约束。在引用的表 'countries' 中缺少约束 'cities_ibfk_1' 的索引”
谁能告诉我这有什么问题?我真的很感谢你的帮助。谢谢。
以上代码来自教程的Assotiation部分 (http://docs.sequelizejs.com/manual/tutorial/associations.html) 一对多关联。
我还附上了 Sequelize 自动生成的代码:
CREATE TABLE IF NOT EXISTS `countries` (
`id` INTEGER NOT NULL auto_increment ,
`isoCode` VARCHAR(255),
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NOT NULL,
PRIMARY KEY (`id`))
ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `cities` (
`id` INTEGER NOT NULL auto_increment ,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NOT NULL,
`countryCode` VARCHAR(255),
PRIMARY KEY (`id`),
FOREIGN KEY (`countryCode`) REFERENCES `countries` (`isoCode`)
ON DELETE SET NULL ON UPDATE CASCADE)
ENGINE=InnoDB;
乍一看,这里的 SQL 语法似乎没有错,但无论如何这都会出错。谁能弄清楚出了什么问题?还是这是Sequelize的问题?
【问题讨论】:
标签: javascript mysql sql database sequelize.js