2010-04-13 7 views
2

J'ai essayé d'obtenir une suppression en cascade et cela ne semble pas fonctionner. Je suis sûr qu'il me manque quelque chose d'évident, quelqu'un peut-il m'aider à le trouver?Problèmes d'obtention de clés étrangères fonctionnant sous MySQL

Je voudrais une suppression sur la table 'articles' pour déclencher une suppression sur les lignes correspondantes dans la table '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

Juste pour vérifier, après avoir créé vos tables comme indiqué ci-dessus, vous créez ensuite une série de lignes dans 'article_sections' pour une ligne' de articles' donné et puis essayer de le supprimer "articles" rangée et ensuite quoi? Il déclenche une erreur de clé étrangère ou il ne supprime pas les lignes liées? – Thomas

Répondre

3

Vous devez déclarer explicitement la contrainte de clé étrangère. La clause REFERENCES sur une définition de colonne ne fonctionne pas.

Essayez ceci:

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; 
Questions connexes