如何删除存储外键的表的行?

yruzcnhs  于 2021-06-23  发布在  Mysql
关注(0)|答案(0)|浏览(152)

解决方案如下
我有如下三张table:

CREATE TABLE `t_arch_layer` (
  `arch_layer_id` int(11) NOT NULL AUTO_INCREMENT,
  `arch_layer_name` varchar(45) NOT NULL,
  PRIMARY KEY (`arch_layer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

CREATE TABLE `t_tech` (
  `tech_id` int(11) NOT NULL AUTO_INCREMENT,
  `tech_name` varchar(45) DEFAULT NULL,
  `tech_type_id` int(11) NOT NULL,
  `tech_icon` text,
  PRIMARY KEY (`tech_id`),
  KEY `fk_t_tech_t_tech_type1_idx` (`tech_type_id`),
  CONSTRAINT `fk_t_tech_t_tech_type1` FOREIGN KEY (`tech_type_id`) REFERENCES `t_tech_type` (`tech_type_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;

CREATE TABLE `t_arch_layer_tech` (
  `arch_layer_id` int(11) NOT NULL,
  `tech_id` int(11) NOT NULL,
  PRIMARY KEY (`tech_id`,`arch_layer_id`),
  KEY `fk_t_layer_has_t_tech_t_tech1_idx` (`tech_id`),
  KEY `fk_t_layer_has_t_tech_t_layer1_idx` (`arch_layer_id`),
  CONSTRAINT `fk_t_layer_has_t_tech_t_layer1` FOREIGN KEY (`arch_layer_id`) REFERENCES `t_arch_layer` (`arch_layer_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_t_layer_has_t_tech_t_tech1` FOREIGN KEY (`tech_id`) REFERENCES `t_tech` (`tech_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

基本上这是一种典型的情况,一个表使用另两个不同表中的两个外键。此表存储层和技术之间可能的组合,因此它不能存储层id和技术id的任何组合,而这两个组合不在两者中。
但有一个问题,我需要删除每当我想从一些行 t_arch_layer_tech . 这是不可能的,因为外键,我知道。
我的问题是,是否有什么东西可以使用外键作为引用来禁止插入没有插入的值 t_tech 或者 t_arch_layer 并且也被认为是表的“自己的字段”(我无法更好地解释),以便删除表中的任何一行 t_arch_layer_tech table?删除t\u tech和t\u arch\u layer表以避免外键,然后将限制设置为t\u arch\u layer\u tech不是解决方案。
解决方案
当出现错误时,有必要检查数据库关系并仔细阅读提供的消息。这似乎没用,但它帮助我了解了发生了什么事 t_arch_layer_tech fk公司。我把它们放在另一张table上,但分开使用,而不是作为复合fk。这是因为我可以在 t_arch_layer_tech 只删除特定的对。
所以,总结一下,如果你要使用同时存在的fk(就像我的一对“arch\u layer\u id,tech\u id”)只创建一个fk,它是一个复合fk,使用上面提到的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题