【MySQL】ERROR 1005 (HY000): Can't create table' (errno: 150)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 创建含有外键的表的时候遇到如下错误 ERROR 1005 (HY000): Can't create table 'eidsvr.oplog' (errno: 150) test@3302 12:02:22>CREATE TABLE biz(    -...
创建含有外键的表的时候遇到如下错误 
ERROR 1005 (HY000): Can't create table 'eidsvr.oplog' (errno: 150)
test@3302 12:02:22>CREATE TABLE biz(
    -> id INTEGER NOT NULL AUTO_INCREMENT, 
    -> buid VARCHAR(255), 
    -> appkey VARCHAR(255), 
    -> createtime DATETIME, 
    -> name VARCHAR(255), 
    -> seccode TEXT(2048), 
    -> externel1 INTEGER, 
    -> externel2 VARCHAR(255), 
    -> externel3 VARCHAR(255), 
    -> PRIMARY KEY (id)
    -> ) ENGINE=InnoDB  ROW_FORMAT=COMPRESSED  KEY_BLOCK_SIZE=8 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.02 sec)
test@3302 12:03:13>CREATE TABLE oplog (
    -> id INTEGER NOT NULL AUTO_INCREMENT, 
    -> eid VARCHAR(128), 
    -> optime DATETIME, 
    -> kp VARCHAR(128), 
    -> optype INTEGER, 
    -> appkey VARCHAR(255), 
    -> buid VARCHAR(255), 
    -> description VARCHAR(255), 
    -> externel1 INTEGER, 
    -> externel2 VARCHAR(255), 
    -> externel3 VARCHAR(255), 
    -> PRIMARY KEY (id), 
    -> FOREIGN KEY(appkey) REFERENCES biz(appkey)
    -> ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED  KEY_BLOCK_SIZE=8 DEFAULT CHARSET=utf8;
ERROR 1005 (HY000): Can't create table 'eidsvr.oplog' (errno: 150)
以下情况会导致上述问题
1、外键字段与要做外键校验的字段类型不匹配
2、MySQL支持外键约束,并提供与其它DB相同的功能,但表类型必须为 InnoDB,非InnoDB 存储引擎会导致报错。
3、建外键的表的那个列没有index。

针对本例,在父表上的appkey 上添加索引 解决该问题! 
eidsvr@3302 12:10:09> alter table biz add index idx_b_appkey(appkey);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

eidsvr@3302 12:14:06>CREATE TABLE oplog (
    -> id INTEGER NOT NULL AUTO_INCREMENT, 
    -> eid VARCHAR(128), 
    -> optime DATETIME, 
    -> kp VARCHAR(128), 
    -> optype INTEGER, 
    -> appkey VARCHAR(255), 
    -> buid VARCHAR(255), 
    -> description VARCHAR(255), 
    -> externel1 INTEGER, 
    -> externel2 VARCHAR(255), 
    -> externel3 VARCHAR(255), 
    -> PRIMARY KEY (id), 
    -> FOREIGN KEY(appkey) REFERENCES biz(appkey)
    -> ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED  KEY_BLOCK_SIZE=8 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)

MySQL官方提供的问题原因:
Cannot find an index in the referenced table where the referenced columns appear as the first columns, or column types in the table and the referenced table do not match for constraint.
不能在“被reference的表”即父表里找到包含“被reference字段”的索引,或者是两个关联字段类型不匹配!
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
27天前
|
网络协议 关系型数据库 MySQL
MySQL报ERROR 2002 (HY000)解决
通过上述步骤,可以有效地解决MySQL连接时出现的 `ERROR 2002 (HY000)`错误。这些步骤包括检查和启动MySQL服务、配置文件检查、套接字文件检查、日志文件分析、进程检查、防火墙设置、客户端配置和最终的MySQL重装。确保每个步骤都按顺序执行,有助于快速定位和解决问题,使MySQL服务器恢复正常运行。
336 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL异常一之: You can‘t specify target table for update in FROM clause解决办法
这篇文章介绍了如何解决MySQL中“不能在FROM子句中指定更新的目标表”(You can't specify target table for update in FROM clause)的错误,提供了错误描述、需求说明、错误做法和正确的SQL写法。
557 0
|
4月前
|
SQL 关系型数据库 MySQL
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
这篇文章提供了解决MySQL数据库"Access denied for user 'root'@'localhost' (using password: YES)"错误的方法,通过跳过密码验证、修改root密码,然后重启服务来解决登录问题。
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
3月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
208 0
|
4月前
|
关系型数据库 MySQL Java
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
|
5月前
|
关系型数据库 MySQL Linux
error: Failed dependencies: libncurses.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 libtinfo.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 如何解决?
error: Failed dependencies: libncurses.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 libtinfo.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 如何解决?
637 3
|
19天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
22天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
36 4
|
28天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
159 1