需要执行MYSQL外键

问题描述

| 考虑以下SQL:
    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\",\"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;
也,
    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
中的任何内容都不匹配的值。我认为外键约束将阻止这种情况的发生。 *第二个问题是,当从“ 3”中删除“ 4”时,MySQL不会从“ 2”中删除“ 4”记录。我认为级联语句可以实现这一目标。 我觉得我缺少明显的东西。有什么建议么?     

解决方法

        您需要为表指定使用InnoDB引擎。默认情况下,MySQL将使用MyISAM表,该表可以理解“创建表”查询中的外键规范,但会忽略键本身。 如果执行“显示创建表PARENT”,则很有可能会看到“ 8”。     ,        您在使用InnoDB吗? MyISAM(MySQL中的默认引擎)不支持外键,而InnoDB则支持。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...