我目前即将学习如何使用 Sequelize 迁移。因此,我创建了一些示例模型并进行了迁移。不,我试图删除一列 - 只要我没有插入数据,迁移就可以正常工作。
所以这是我的示例模型:
Model1 {id:int, name:string, description:string, fk_model2:int {references Model2:id} }
Model2 {id:int, name:string, description:string, test:string}
Model1toModel2 {id_model1:int, id_model2:int} //not a real model but a table
Model1和Model2之间存在 1:n 关系,并且也存在 n:m 关系。n:m 关系在数据库中用一个表表示,并由它自己的迁移创建。
现在出现了这个问题:我在表Model2中定义了一个名为test的列(如图)。插入一些示例数据后,我尝试运行迁移,这会删除此列。在表Model2上,这工作得很好。
第一次尝试:在迁移文件中创建表时,我在表Model1onUpdate: 'cascade', onDelete: 'cascade'
中使用了fk_model2 -column 。因此,删除列迁移清空了Model1表和为 n:m 关系创建的Model1toModel2表。那不是我想要的。
第二次尝试:我用过onUpdate: 'cascade', onDelete: 'restrict'
. 正如预期的那样,这给了我ERROR: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed
,因为我现在无法删除Model2中使用的Model1数据。这也不是我想要的。
问题:如果我迁移一个表,它是否会删除整个记录并根据迁移文件中定义的新条件重新创建它?- 所以ON DELETE
-Condition 触发了?
我怎么能做到它只是删除不是键值的列test而不触及表Model1和Model1toModel2?(当然,如果Model2中的键(以及整个记录)被删除,我希望Model1toModel2中的记录也被删除,并且Model1中的 1:n 被设置NULL
或DEFAULT
.)