如何使用 Sequelize Migrations 删除非键列而不删除相关记录?
How to drop a non-key column without deleting related records with Sequelize Migrations?
我目前正准备学习如何使用 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 关系在数据库中用 table 表示,并由它自己的迁移创建。
现在有这个问题:
我在 table Model2 中定义了一个名为 test 的列(如图所示)。插入一些示例数据后,我尝试 运行 迁移,删除此列。在 table Model2 这工作得很好。
第一次尝试:我在 fk_model2 中使用了 onUpdate: 'cascade', onDelete: 'cascade'
-table Model1 中的列在迁移文件中创建 table 时。
所以 delete-column 迁移清空了 Model1 table 和 Model1toModel2-table 是为 n:m 关系创建的。那不是我想要的。
第二次尝试:我用了onUpdate: 'cascade', onDelete: 'restrict'
。正如预期的那样,这给了我 ERROR: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed
,因为我现在无法删除 Model2-在 Model1 中使用的数据。这也不是我想要的。
问题:如果我迁移一个table,它会删除整个记录并根据迁移文件中定义的新条件重新创建吗? - 所以 ON DELETE
-条件触发?
我怎么能做到它只删除不是键值的列 test,而不触及 tables Model1 和 Model1toModel2? (当然,如果 Model2 中的键(以及整个记录)被删除,我希望 Model1toModel2 中的记录也被删除, Model1中的1:n设置为NULL
或DEFAULT
.)
我在这里找到了 problem/solution:
How to delete or add column in SQLITE?
Sequelize 只是假装删除一个列,而不是删除数据并在之后按预期重新创建它。所以这会导致相关记录丢失或抛出 SQL-Errors。
我目前正准备学习如何使用 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 关系在数据库中用 table 表示,并由它自己的迁移创建。
现在有这个问题: 我在 table Model2 中定义了一个名为 test 的列(如图所示)。插入一些示例数据后,我尝试 运行 迁移,删除此列。在 table Model2 这工作得很好。
第一次尝试:我在 fk_model2 中使用了 onUpdate: 'cascade', onDelete: 'cascade'
-table Model1 中的列在迁移文件中创建 table 时。
所以 delete-column 迁移清空了 Model1 table 和 Model1toModel2-table 是为 n:m 关系创建的。那不是我想要的。
第二次尝试:我用了onUpdate: 'cascade', onDelete: 'restrict'
。正如预期的那样,这给了我 ERROR: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed
,因为我现在无法删除 Model2-在 Model1 中使用的数据。这也不是我想要的。
问题:如果我迁移一个table,它会删除整个记录并根据迁移文件中定义的新条件重新创建吗? - 所以 ON DELETE
-条件触发?
我怎么能做到它只删除不是键值的列 test,而不触及 tables Model1 和 Model1toModel2? (当然,如果 Model2 中的键(以及整个记录)被删除,我希望 Model1toModel2 中的记录也被删除, Model1中的1:n设置为NULL
或DEFAULT
.)
我在这里找到了 problem/solution: How to delete or add column in SQLITE?
Sequelize 只是假装删除一个列,而不是删除数据并在之后按预期重新创建它。所以这会导致相关记录丢失或抛出 SQL-Errors。