首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL InnoDB CASCADE?

MySQL InnoDB CASCADE?
EN

Stack Overflow用户
提问于 2009-10-16 13:57:59
回答 1查看 4.3K关注 0票数 0

我开始尝试在web应用程序中使用InnoDB。我已经设置了一些带有外键的表,但它们的行为并不像预期的那样。下面是我的表CREATE语句:

代码语言:javascript
复制
CREATE TABLE sections ( 
    section_id  INT NOT NULL AUTO_INCREMENT, 
    title       VARCHAR(30), 
    created_at  int(10) NOT NULL, 
    updated_at  int(10) NOT NULL,

    PRIMARY KEY(section_id)
) ENGINE=InnoDB; 

CREATE TABLE pages ( 
    page_id       INT NOT NULL AUTO_INCREMENT, 
    section_idfk  INT NOT NULL, 

    PRIMARY KEY(page_id), 
    FOREIGN KEY(section_idfk) REFERENCES sections(section_id) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE
) ENGINE=InnoDB;

这些表可以创建ok,我可以用数据填充它们,但是,我希望对Sections表所做的任何更改都会影响Pages表中的相应行。我尝试更改了一个节的ID,也尝试完全删除了一个节。在这两种情况下,Pages表都不受影响。

有人能看出我哪里错了吗?

任何建议都很感谢。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-16 14:27:20

我在MySQL查询浏览器中快速地将两个类似的表组合在一起,定义如下:

代码语言:javascript
复制
DROP TABLE IF EXISTS `test`.`sections`;
CREATE TABLE  `test`.`sections` (
  `section_id` int(10) unsigned NOT NULL auto_increment,
  `title` varchar(30) NOT NULL,
  `created_at` int(10) unsigned NOT NULL,
  `updated_at` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`section_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `test`.`pages`;
CREATE TABLE  `test`.`pages` (
  `page_id` int(10) unsigned NOT NULL auto_increment,
  `section_idfk` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`page_id`),
  KEY `section_idfk` (`section_idfk`),
  CONSTRAINT `section_idfk` FOREIGN KEY (`section_idfk`) REFERENCES `sections` (`section_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

和你发布的不完全一样,但是足够接近了。

我在节中插入一行。我在pages表中添加了一个具有匹配section_id的行。然后,我从部分中删除;它也会从页面中删除。

工作得很好。

编辑-我输入了你的创建,它也工作得很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1578217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档