当其他表有外键时,我需要运行drop table pages
。
CREATE TABLE `pages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uri` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `pages_domain_unique` (`domain`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
引用表:
CREATE TABLE `link_data` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`page_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `link_data_page_id_foreign` (`page_id`),
CONSTRAINT `link_data_page_id_foreign` FOREIGN KEY (`page_id`) REFERENCES `pages` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
剧本......
SET foreign_key_checks = 0;
drop table drop table pages; --// the row I am failing with.
ALTER TABLE link_dataDROP FOREIGN KEY link_data_page_id_foreign;
ALTER TABLE link_data DROP COLUMN page_id;
SET foreign_key_checks = 1;
我需要在删除引用字段之前删除表页面。 (复杂的问题,不要为什么)。
为什么foreign_key_checks=0
在这种情况下不起作用?
Integrity constraint violation: 1217 Cannot delete or update a parent row: a foreign key constraint fails (SQL: DROP TABLE
PAG
ES ;)
的更新
问题更多的是为什么foreign_key_checks=0
不会影响脚本。如何解决它的简单,只是以不同的方式优先考虑脚本。
由于
答案 0 :(得分:1)
您是否尝试过设置级联选项?
CONSTRAINT `link_data_page_id_foreign` FOREIGN KEY (`page_id`) REFERENCES `pages` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE
如果没有,请尝试将约束声明为可延迟。删除寄存器本身时,请设置延迟模式,然后再返回。
如果您使用的是phpMyAdmin,请转到Variables
部分并停用foreign key checks
以查看是否有效。