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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 创建含有外键的表的时候遇到如下错误 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字段”的索引,或者是两个关联字段类型不匹配!
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
28 0
|
1天前
|
关系型数据库 MySQL 数据库连接
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
15 5
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
|
2天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
|
6天前
|
关系型数据库 MySQL 数据库
MySQL 启动 登录报错Job for mysqld.service failed because the control process exited with error code. See
MySQL 启动 登录报错Job for mysqld.service failed because the control process exited with error code. See
|
12天前
|
SQL 关系型数据库 MySQL
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
|
23天前
|
关系型数据库 MySQL 数据库
docker 安装mysql(踩坑踩得想哭 详细解决教程)ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using pa
docker 安装mysql(踩坑踩得想哭 详细解决教程)ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using pa
27 1
|
2天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
|
3天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
15 0
|
10天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
10天前
|
SQL 关系型数据库 MySQL
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)