0

我开始尝试在 Web 应用程序中使用 InnoDB。我已经使用外键设置了一些表,但它们的行为不如预期。这是我的表 CREATE 语句:

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;

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

谁能看到我哪里出错了?

任何建议表示赞赏。
谢谢。

4

1 回答 1

2

我很快在 MySQL 查询浏览器中将两个相似的表放在一起,定义如下:

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;

与您发布的不完全相同,但足够接近。

我插入一行。我将具有匹配 section_id 的行添加到 pages 表中。然后我执行 DELETE FROM 部分;它也会从页面中删除。

工作得很好。

编辑-我输入了您的创建,它也可以正常工作。

于 2009-10-16T14:27:19.817 回答