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 Query Browser で 2 つの同様のテーブルをすばやくまとめました。

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 を持つ行をページ テーブルに追加します。次に、DELETE FROM セクションを実行します。ページからも削除されます。

うまく動作します。

編集 - 私はあなたの作品を入力しましたが、それもうまくいきます。

于 2009-10-16T14:27:19.817 に答える