Проблемы с получением внешних ключей, работающих в MySQL - PullRequest
2 голосов
/ 14 апреля 2010

Я пытался получить удаление в каскад, и это, похоже, не работает. Я уверен, что упускаю что-то очевидное, кто-нибудь может мне помочь найти это?

Я ожидал бы, что удаление таблицы 'article' вызовет удаление соответствующих строк в таблице article_section_lt.

CREATE TABLE articles (
    id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    url_stub VARCHAR(255) NOT NULL UNIQUE,
    h1 VARCHAR(60) NOT NULL UNIQUE,
    title VARCHAR(60) NOT NULL,
    description VARCHAR(150) NOT NULL,
    summary VARCHAR(150) NOT NULL DEFAULT "",
    html_content TEXT,
    date DATE NOT NULL,
    updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)ENGINE=INNODB;


CREATE TABLE article_sections (
    /* blog, news etc */
    id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    url_stub VARCHAR(255) NOT NULL UNIQUE,
    h1 VARCHAR(60) NOT NULL,
    title VARCHAR(60) NOT NULL,
    description VARCHAR(150) NOT NULL,
    summary VARCHAR(150) NOT NULL DEFAULT "",
    html_content TEXT NOT NULL DEFAULT ""
)ENGINE=INNODB;

CREATE TABLE article_section_lt (
    fk_article_id INTEGER UNSIGNED NOT NULL REFERENCES articles(id) ON DELETE CASCADE,
    fk_article_section_id INTEGER UNSIGNED NOT NULL
)ENGINE=INNODB;

1 Ответ

3 голосов
/ 14 апреля 2010

Вам необходимо явно объявить ограничение внешнего ключа. Предложение REFERENCES в определении столбца не работает.

Попробуйте это:

CREATE TABLE article_section_lt (
    fk_article_id INTEGER UNSIGNED NOT NULL,
    fk_article_section_id INTEGER UNSIGNED NOT NULL,
    KEY fk_article_id (fk_article_id),
    CONSTRAINT fk_article_section_lt_to_article FOREIGN KEY (fk_article_id) REFERENCES articles(id) ON DELETE CASCADE
)ENGINE=INNODB;
...