首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要实施MYSQL外键

问需要实施MYSQL外键
EN

Stack Overflow用户
提问于 2011-05-31 01:38:06
回答 2查看 167关注 0票数 0

考虑以下SQL:

代码语言:javascript
复制
    CREATE DATABASE TEST01234;
    USE TEST01234;

    CREATE TABLE PARENT (
      PARENT_NAME varchar(255) PRIMARY KEY,
      PARENT_DESC varchar(255));

    CREATE TABLE CHILD (
      PARENT_NAME varchar(255),
      CHILD_NAME varchar(255),
      CHILD_DESC varchar(255),
      PRIMARY KEY (PARENT_NAME, CHILD_NAME),
      FOREIGN KEY (PARENT_NAME) REFERENCES PARENT(PARENT_NAME)
      ON UPDATE CASCADE
      ON DELETE CASCADE);

    INSERT INTO PARENT VALUES("PARENT A","Some Parent");

    INSERT INTO CHILD VALUES("PARENT A","CHILD A","Some Child");
    INSERT INTO CHILD VALUES("PARENT A","CHILD B","Some Child");
    INSERT INTO CHILD VALUES("PARENT A","CHILD C","Some Child");

    INSERT INTO CHILD VALUES("PARENT B","CHILD D","Non-present Parent");

    DELETE FROM PARENT WHERE PARENT_NAME = "PARENT A";

    SELECT * FROM CHILD;

另外,

代码语言:javascript
复制
    mysql> SHOW VARIABLES LIKE "%version%";
    +-------------------------+---------------------+
    | Variable_name           | Value               |
    +-------------------------+---------------------+
    | protocol_version        | 10                  |
    | version                 | 5.1.41-3ubuntu12.10 |
    | version_comment         | (Ubuntu)            |
    | version_compile_machine | i486                |
    | version_compile_os      | debian-linux-gnu    |
    +-------------------------+---------------------+
    5 rows in set (0.00 sec)

有两件事正在发生,我原以为会有所不同。

*第一个是MySQL允许我在CHILD中插入与PARENT中的任何值都不匹配的值。我认为外键约束会阻止这种情况的发生。

*第二个问题是MySQL在从CHILD中删除PARENT A时,不会从PARENT A中删除PARENT记录。我认为cascade语句会实现这一点。

我觉得我漏掉了一些明显的东西。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2011-05-31 01:41:10

您需要指定对表使用InnoDB引擎。默认情况下,MySQL将使用MyISAM表,该表理解"create table“查询中的外键规范,但忽略键本身。

如果你做一个“show create table PARENT”,你很可能会看到ENGINE=MyISAM。

票数 1
EN

Stack Overflow用户

发布于 2011-05-31 01:44:22

你在使用InnoDB吗?MyISAM (MySQL中的默认引擎)不支持外键,而InnoDB支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6179220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档