无法在MySQL中创建FOREIGN KEY CONSTRAINT

 爱电影麦兜兜 发布于 2023-02-10 14:04

我在Ubuntu中使用phpMyAdmin 3.5.8.1deb1创建了我的MySQL数据库.

而不是我的所有表都是InnoDB,我不能添加外键,这是一个例子:

ALTER TABLE element ADD CONSTRAINT FK_element_id_user FOREIGN KEY (id_user) REFERENCES user(id) ON DELETE SET NULL ON UPDATE CASCADE;

当我运行此脚本时,我收到此错误:

#1005 - 无法创建表'tpw.#sql-4d8_e2'(错误号:150)(详情......)

当我点击细节时,我得到了这个:

InnoDB文档支持事务,行级锁定和外键

我试图在关系视图中手动添加FK

1 个回答
  • 这里可能会有一些事情发生.以下是一些需要注意的事项:

    表之间每个字段的数据类型是否匹配?

    两个表都使用相同的MySQL引擎吗?

    这是一个很好的资源,可以帮助您进一步调试此问题.

    摘自上面链接的资源:

    1)两个关键字段类型和/或大小不完全匹配.例如,如果一个是INT(10),则关键字段也需要是INT(10)而不是INT(11)或TINYINT.您可能希望使用SHOW CREATE TABLE确认字段大小,因为查询浏览器有时会直观地显示INT(1)和INT(11)的INTEGER.您还应检查一个是否已签名而另一个是否为UNSIGNED.它们都需要完全相同.

    2)您尝试引用的关键字段之一没有索引和/或不是主键.如果关系中的某个字段不是主键,则必须为该字段创建索引.

    3)外键名称是已存在键的副本.检查外键的名称在数据库中是否唯一.只需在密钥名称的末尾添加一些随机字符即可对其进行测试.

    4)您的一个或两个表是MyISAM表.为了使用外键,表必须都是InnoDB.(实际上,如果两个表都是MyISAM,那么您将不会收到错误消息 - 它只是不会创建密钥.)在查询浏览器中,您可以指定表类型.

    5)您已指定级联ON DELETE SET NULL,但相关键字段设置为NOT NULL.您可以通过更改级联或将字段设置为允许NULL值来解决此问题.

    6)确保Charset和Collat​​e选项在表级别以及关键列的单个字段级别相同.

    7)您的外键列上有一个默认值(即默认值= 0).

    8)关系中的一个字段是组合(复合)密钥的一部分,并且没有它自己的单独索引.即使该字段具有索引作为复合键的一部分,您也必须仅为该键字段创建单独的索引,以便在约束中使用它.

    9)您的ALTER语句中存在语法错误,或者您在关系中输入了一个字段名称.

    10)外键的名称超过64个字符的最大长度.

    2023-02-10 14:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有