2010-04-13 3 views
2

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

Я ожидал бы удаления в таблице «articles», чтобы вызвать удаление в соответствующих строках таблицы «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; 
+0

Просто проверить, после создания таблицы, как показано выше, вы затем создать ряд строк в 'article_sections' для данного' articles' строки, а затем попытаться удалить, что строка 'articles', а затем что? Он выдает ошибку внешнего ключа или не удаляет связанные строки? – Thomas

ответ

3

Необходимо явно объявить ограничение внешнего ключа. Условие 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;