删除ON DELETE CASCADE

时间:2014-10-28 09:28:55

标签: sql constraints cascade alter

我有一张儿童桌。和创建表时使用ON DELETE CASCADE的外键。

子表或父表中没有记录。

我希望主键,外键保持原样但只想从子表中删除CASCADING选项。

无论如何,我可以改变那张儿童桌。

谢谢。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

默认为NO ACTION。

因此,请尝试将您的子表更改为默认值。

答案 2 :(得分:1)

表格:

SHOW CREATE TABLE 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 :(得分:0)

(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,则可以使用不同的字典视图来帮助您正确地重新创建约束