MySQL在1个表中有多个级联外键

时间:2012-09-06 20:48:05

标签: mysql foreign-keys

我使用MySQL 5.1。有一个包含2个外键的表,引用2个不同的表:

CREATE TABLE `words` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `word` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `words_groups` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `words_in_group` (
  `group_id` int(10) unsigned DEFAULT NULL,
  `word_id` int(10) unsigned DEFAULT NULL,
  KEY `word_id` (`word_id`) USING BTREE,
  KEY `group_id` (`group_id`) USING BTREE,
  CONSTRAINT `group_id` FOREIGN KEY (`group_id`) REFERENCES `words_groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `word_id_fk` FOREIGN KEY (`word_id`) REFERENCES `words` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

但由于某种原因,当我使用phpMyAdmin或Navicat检查此表结构时,将取消设置words_in_group表中某个键的CASCADE属性。

它能是什么?怎么解决?也许,使用触发器?

1 个答案:

答案 0 :(得分:1)

通过插入一些测试数据来测试级联,然后从单词中删除一行。

您也可以使用mysqldump转储数据库,并读取数据库服务器认为应该执行的操作。

我很确定你会发现级联的工作方式是书面的,而不是如图形界面所示。