首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL在创建外键时会给出成功消息,但实际上它并没有创建外键

问MySQL在创建外键时会给出成功消息,但实际上它并没有创建外键
EN

Stack Overflow用户
提问于 2012-12-28 21:59:01
回答 1查看 45关注 0票数 0

我想在data和containers之间添加第二个外键约束。当我删除一个容器时,链接到这个容器的数据也必须被删除。

表:

代码语言:javascript
复制
mysql> DESCRIBE data;
+------------------------+--------------+------+-----+---------------------+----------------+
| Field                  | Type         | Null | Key | Default             | Extra          |
+------------------------+--------------+------+-----+---------------------+----------------
| imei                   | varchar(15)  | NO   | MUL | NULL                |                

mysql> DESCRIBE containers;
+--------------------+-------------+------+-----+---------------------+----------------+
| Field              | Type        | Null | Key | Default             | Extra          |
+--------------------+-------------+------+-----+---------------------+----------------+

| imei               | varchar(15) | NO   | MUL | NULL                |                |

我用下面的语句创建一个外键:

代码语言:javascript
复制
 mysql> ALTER TABLE `data` ADD FOREIGN KEY (`imei`) REFERENCES `containers`(`imei`) ON DELETE CASCADE;
    Query OK, 15168 rows affected (0.12 sec)
    Records: 15168  Duplicates: 0  Warnings: 0

但尚未创建外键:

代码语言:javascript
复制
 mysql> use INFORMATION_SCHEMA;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A

    Database changed
    mysql> select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME = 'containers';
    +----------------+-------------+-----------------------+-----------------------+------------------------+
    | TABLE_NAME     | COLUMN_NAME | CONSTRAINT_NAME       | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
    +----------------+-------------+-----------------------+-----------------------+------------------------+
    | container_logs | imei        | container_logs_ibfk_1 | containers            | imei                   |
    +----------------+-------------+-----------------------+-----------------------+------------------------+
    1 row in set (0.16 sec)

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-28 22:23:44

并不是所有的存储引擎都支持外键;不支持某些SQL特性的存储引擎不会产生错误,而只是忽略语句(实际上SQL解析器在MySQL架构中是较高层的,它使用较低级别的API与存储引擎通信)。

因此,如果使用的是MyISAM,则无法创建外键,但不会返回任何错误

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

https://stackoverflow.com/questions/14070629

复制
相关文章

相似问题

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