1. 程式人生 > >MySQL多對多表關係刪除策略

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的資料,在中間表中有插入該資料,在模組表中刪除該條資料的時候,對應中間表的資料也會剔除。