【问题标题】:Problems getting foreign keys working in MySQL让外键在 MySQL 中工作的问题
【发布时间】:2011-02-07 16:37:00
【问题描述】:

我一直在尝试删除级联,但它似乎不起作用。我确定我遗漏了一些明显的东西,谁能帮我找到它?

我希望删除“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;

【问题讨论】:

  • 只是为了验证,在您创建了如上所示的表之后,然后在article_sections 中为给定的articles 行创建一系列行,然后尝试删除该articles 行和然后呢?抛出外键错误还是不删除相关行?

标签: sql mysql foreign-keys innodb foreign-key-relationship


【解决方案1】:

您需要显式声明外键约束。列定义上的 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多