外键接受但不起作用

时间:2013-10-16 15:24:10

标签: mysql foreign-keys

我正在为我的网站创建一个'民意调查'插件,为此我有2x表(如下所示)。

我想要实现的是,通过从dd_polls表中删除'poll',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)
)

2 个答案:

答案 0 :(得分:1)

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

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

并且语法不正确

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

答案 1 :(得分:-1)

ALTER TABLE `dd_polls` ADD FOREIGN KEY ( `poll_id`, `id` ) 
REFERENCES `dd_poll_options` ( `poll_id`, `id`) 
ON DELETE RESTRICT ON UPDATE RESTRICT ;