2010-04-13 3 views
2

나는 계단식으로 삭제하려고 시도했지만 작동하지 않는 것 같습니다. 나는 명백한 무언가를 놓치고 있다고 확신한다. 누구든지 그것을 찾도록 도울 수 있는가?MySQL에서 외래 키가 작동하는 데 문제가 있습니다.

'article_section_lt'테이블에서 해당 행에 대한 삭제를 트리거하려면 'articles'테이블의 삭제가 필요합니다.

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

위와 같이 당신이 당신의 테이블을 만든 후 그냥 당신은 주어진'articles' 행에 대한 article_sections''에서 일련의 행을 만들고 있음을 삭제하려고, 확인합니다 '기사'행을 누른 다음 무엇? 외래 키 오류가 발생하거나 관련된 행을 삭제하지 않습니다? – 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; 
관련 문제