删除时级联删除

12

我有一个子表,并在创建表时使用了ON DELETE CASCADE外键。

无论是在子表还是父表中都没有记录。

我希望保留主键和外键,但只想从子表中删除级联选项。

是否有任何方式可以更改该子表?

谢谢。

4个回答

5

表格:

显示创建表格table;
CREATE TABLE `table` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `id_departamento` int(11) unsigned DEFAULT NULL,
  `name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_departamento` (`id_departamento`),
  CONSTRAINT `departamentos_direcciones_pedidos_ibfk_1` FOREIGN KEY (`id_departamento`) REFERENCES `departamentos` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  1. 首先删除外键。
ALTER TABLE departamentos_direcciones_pedidos DROP CONSTRAINT departamentos_direcciones_pedidos_ibfk_1;
  1. 其次,创建正确的外键。
ALTER TABLE departamentos_direcciones_pedidos ADD FOREIGN KEY (id_departamento) REFERENCES departamentos(id);

3
ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }

默认值为NO ACTION。
因此,请尝试将您的子表更改回默认设置。

fid number(5) references parent(pid) on delete cascade;所以我需要执行 alter table child modify fid on delete set default..... 对吗? - Raghav

1

(Oracle)您只能更改约束的状态。ON DELETE不是一个状态。因此,您需要删除约束并重新创建它。

drop table t1 cascade constraints;
create table t1 (id number unique, rid number constraint t1_fk references t1(id) on delete cascade);

alter table t1 drop constraint t1_fk;
alter table t1 add constraint t1_fk foreign key(rid) references t1(id);

如果您正在使用Oracle,那么有不同的字典视图可以帮助您正确地重新创建约束。

1
  • 将数据库导出为.sql文件
  • 然后按下ctrl + H,将所有的ON DELETE CASCADE替换为""
  • 接着从数据库中删除表格,并使用新文件实例化一个没有ON DELETE CASCADE的新表格

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接