在上一步中,我创建了一个列和以下外键:
CONSTRAINT fk_pricingRuleSetId FOREIGN KEY (`set_id`) REFERENCES dynamic_pricing_rule_set (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
然后我执行revert脚本,它几乎是以下
ALTER TABLE submarket_archive_properties DROP FOREIGN KEY fk_dynamicPricingSetId;
ALTER TABLE submarket_archive_properties DROP COLUMN `dynamic_pricing_set`;
DROP TABLE IF EXISTS dynamic_pricing_rule_set;
执行第二个sql脚本我收到以下错误
Query OK, 143 rows affected (0.37 sec)
Records: 143 Duplicates: 0 Warnings: 0
Query OK, 143 rows affected (0.17 sec)
Records: 143 Duplicates: 0 Warnings: 0
ERROR 1217 (23000) at line 7 in file:'3.7_to_3.7.1.revert.sql': Cannot delete or update a parent row: a foreign key constraint fails
这可能是非常明显的,但我不擅长MySQL并且无法发现它
答案 0 :(得分:0)
其他一些表有此表引用,因此首先要么删除子表或删除引用的所有记录。
您可以通过以下查询获取该表 -
SELECT constraint_Schema AS mydb, table_name AS child_table,constraint_name AS foreign_key_name, referenced_table_name AS master_table
FROM information_Schema.REFERENTIAL_CONSTRAINTS
WHERE constraint_Schema='mydb' AND referenced_table_name='dynamic_pricing_rule_set';
注意:在这里将mydb更改为您的数据库。
这是干净的程序。
但如果您不打扰数据一致性,那么您也可以按照以下程序进行操作 -
set foreign_key_checks=0;
DROP TABLE IF EXISTS dynamic_pricing_rule_set;
set foreign_key_checks=1;
注意:如果我们想保持数据的一致性,我们不应该遵循它。