【问题标题】:Foreign Key accepted but not working外键接受但不工作
【发布时间】:2013-10-16 15:24:10
【问题描述】:

我正在为我的网站创建一个“投票”插件,为此我有 2 个表格(如下所示)。

我想要实现的是,通过从dd_polls 表中删除“投票”,dd_poll_options 表上的任何链接外键也将被删除。

两个表都创建得很好,但我上面提到的期望没有发生。

我是否以正确的方式使用foreign keys,如果是,如何修复我的代码?谢谢。

CREATE TABLE dd_polls (
    ID smallint(3) NOT NULL AUTO_INCREMENT,
    poll_created_by smallint(3) DEFAULT "0",
    poll_created_date datetime DEFAULT "0000-00-00 00:00:00" NOT NULL,
    poll_last_edited_by smallint(3) DEFAULT "0",
    poll_last_edited_date datetime DEFAULT "0000-00-00 00:00:00" NOT NULL,
    poll_title varchar(128) COLLATE latin1_general_ci,
    poll_start_date date DEFAULT "0000-00-00" NOT NULL,
    poll_expiry_date date DEFAULT "0000-00-00" NOT NULL,
    poll_closed tinyint(1) NOT NULL,
    poll_allow_recasting tinyint(1) NOT NULL,
    poll_show_votes tinyint(1) NOT NULL,
    UNIQUE (ID)
)

CREATE TABLE dd_poll_options (
    ID smallint(3) NOT NULL AUTO_INCREMENT,
    option_text text(255) COLLATE latin1_general_ci,
    option_order smallint(2) DEFAULT "0",
    poll_id smallint(3) NOT NULL,
    FOREIGN KEY (poll_id) REFERENCES dd_polls (ID)
        ON DELETE CASCADE,
    UNIQUE (ID)
)

【问题讨论】:

    标签: mysql foreign-keys


    【解决方案1】:

    只是一个疯狂的猜测,但我认为您需要使用 InnoDB 引擎才能使其工作。我打赌你正在使用 MyISAM。

    这是另一个具有相同症状的问题:on-delete-cascade-not-working-in-mysql

    而且语法不正确

    CONSTRAINT FOREIGN KEY (poll_id) REFERENCES dd_polls(ID) ON DELETE CASCADE,
    

    ?

    【讨论】:

    • CONSTRAINT 是可选的,但我同意其余的,它可能是 MyISAM。
    • 这两个表的类型确实是MyISAM。我会寻找一种将它们创建为 InnoDB 的方法,然后再试一次。谢谢。
    • @David:还请查看我在答案中发布的链接。有一种简单的方法可以即时将存储引擎切换到每个表的 InnoDB:ALTER TABLE xxxx ENGINE = InnoDB;
    • @mwhs - 非常感谢。 ALTER TABLE xxxx ENGINE = InnoDB 就像一个魅力,现在当我删除一个投票时,另一个表中链接到它的选项被删除。也感谢您的链接,我一定会在将来使用InnoDB 引擎创建表。
    【解决方案2】:
    ALTER TABLE `dd_polls` ADD FOREIGN KEY ( `poll_id`, `id` ) 
    REFERENCES `dd_poll_options` ( `poll_id`, `id`) 
    ON DELETE RESTRICT ON UPDATE RESTRICT ;
    

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多