MySQL多对多表关系删除策略

菜单表:

CREATE TABLE `es_menu` (
  `id` bigint(20) NOT NULL auto_increment,
  `menuname` varchar(24) NOT NULL,
  `sort` tinyint(4) NOT NULL,
  `inputtime` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

模块表:

CREATE TABLE `es_model` (
  `id` bigint(20) NOT NULL auto_increment,
  `modelname` varchar(24) NOT NULL,
  `sort` tinyint(12) NOT NULL,
  `inputtime` datetime NOT NULL,
  `url` varchar(24) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

中间表:

CREATE TABLE `es_menu_model` (
  `id` bigint(20) NOT NULL auto_increment,
  `es_menu_id` bigint(20) NOT NULL,
  `es_model_id` bigint(20) NOT NULL,
  `inputtime` datetime NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `menu_model_menu` (`es_menu_id`),
  KEY `menu_model_model` (`es_model_id`),
  CONSTRAINT `menu_model_menu` FOREIGN KEY (`es_menu_id`) REFERENCES `es_menu` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `menu_model_model` FOREIGN KEY (`es_model_id`) REFERENCES `es_model` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

菜单表和模块表示多对多关系

在三张表中,因为中间表设置了外键,ON DELETE CASCADE ON UPDATE CASCADE,所以,在当菜单表或者模块表中的数据有删除的时候相对应的中间表的数据也对应删除。例如:模块中有id为1的数据,在中间表中有插入该数据,在模块表中删除该条数据的时候,对应中间表的数据也会剔除。

猜你喜欢

转载自blog.csdn.net/ren814/article/details/81735544