mysql - 错误代码:1005。无法创建表'...'(错误号:150)

我在互联网上搜索了这个问题的解决方案并检查了SO问题,但没有解决方案适用于我的情况。

我想从表sira_no到metal_kod创建一个外键。

ALTER TABLE sira_no

ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU)

REFERENCES metal_kod(METAL_KODU)

ON DELETE SET NULL

ON UPDATE SET NULL ;

该脚本返回:

Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150)

我尝试在索引表中添加索引:

CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU);

我在两个表(charset和collation)上检查了METAL_KODU。 但无法找到解决这个问题的方法。 有谁有想法吗? 提前致谢。

编辑:这是metal_kod表:

METAL_KODU varchar(4) NO PRI

DURUM bit(1) NO

METAL_ISMI varchar(30) NO

AYAR_YOGUNLUK smallint(6) YES 100

11个解决方案

259 votes

错误代码:1005 - 代码中的主键引用错误

通常它是由于参考FK字段不存在。 可能是你有错字错误,或检查案例应该是相同的,或者是字段类型不匹配。 FK链接的字段必须与定义完全匹配。

一些已知原因可能是:

两个关键字段类型和/或大小不完全匹配。 例如,如果一个是ON,则关键字段也需要为DELETE而不是SET或NULL。您可能需要使用NOT NULL NULL确认字段大小,因为查询浏览器有时会在视觉上仅为INT(10)和INT(11)显示INTEGER。 还应该检查一个不是SIGNED而另一个是UNSIGNED.它们都需要完全相同。

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

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

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

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

确保Charset和Collate选项在表级别以及关键列的单个字段级别都相同。

外键列上有默认值(即默认值= 0)

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

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

外键的名称超过64个字符的最大长度。

有关更多详细信息,请参阅:MySQL错误号1005无法创建表

hjpotter92 answered 2019-07-31T23:38:09Z

11 votes

将数据库从一个服务器导出到另一个服务器时,也可能发生这种情况,默认情况下,这些表按字母顺序列出。

因此,您的第一个表可能具有另一个尚未创建的表的外键。 在这种情况下,请禁用foreign_key_checks并创建数据库。

只需将以下内容添加到脚本中:

SET FOREIGN_KEY_CHECKS=0;

它应该工作。

happyhardik answered 2019-07-31T23:38:56Z

4 votes

我知道这是一个迟到的答案,但我认为这对某人有帮助。

有时它是由于主表被删除(可能是通过禁用foreign_key_checks)但外键CONSTRAINT仍然存在于其他表中。 在我的情况下,我放弃了桌子,并试图重新创建它,但它给我带来了同样的错误。

因此,尝试从所有表中删除所有外键CONSTRAINT(如果有),然后更新或创建表。

Raju Gautam answered 2019-07-31T23:39:36Z

3 votes

当外键和引用键不具有相同类型或相同长度时,通常会发生这种情况

zahid9i answered 2019-07-31T23:40:03Z

2 votes

错误代码:1005

你好,我正在回答这个问题,以便任何像我一样面临类似问题的人都可以从中受益。 相信我,这可以被忽视)(这可能已经回答了,如果有,请原谅我)

我有类似的问题,所以这里有一些我尝试过的事情(除了解决方案以外没有任何顺序:))

更改了外键名称(不起作用)

减少了外键长度

验证了数据类型(没有错误)

检查索引

检查整理(一切都很好,又来了)

截断表,没有好用

丢弃桌子并重新创建

试图看看是否正在创建任何循环引用 - 一切正常

最后,我看到我打开了两位编辑。 一个在PHPStorm(jetbrains)和另一个MySQL工作台。 似乎PHPStorm / SQL工作台创建了某种编辑锁。我关闭PHPStorm只是为了检查锁定是否是这种情况(它可能是另一种方式)。 这解决了我的问题。希望这可以帮助有类似问题的人。

Rajiv Nair answered 2019-07-31T23:41:46Z

2 votes

我有类似的错误。 问题与子表和父表没有相同的字符集和排序规则有关。 这可以通过附加ENGINE = InnoDB DEFAULT CHARACTER SET = utf8来修复;

CREATE TABLE IF NOT EXISTS `country` (`id` INT(11) NOT NULL AUTO_INCREMENT,...) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8;

...在SQL语句上意味着有一些丢失的代码。

user2258168 answered 2019-07-31T23:42:19Z

1 votes

它发生在我的情况下,因为约束声明中引用的表的名称不正确(我忘记了表名中的大写)

ALTER TABLE `Window` ADD CONSTRAINT `Windows_ibfk_1` FOREIGN KEY (`WallId`) REFERENCES `Wall` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

我希望有所帮助。

Abdellah Alaoui answered 2019-07-31T23:42:47Z

1 votes

外键必须与它引用的主键具有完全相同的类型。 由于示例的类型为“INT UNSIGNED NOT NULL”,因此foreing键也必须为“INT UNSIGNED NOT NULL”

CREATE TABLE employees(

id_empl INT UNSIGNED NOT NULL AUTO_INCREMENT,

PRIMARY KEY(id)

);

CREATE TABLE offices(

id_office INT UNSIGNED NOT NULL AUTO_INCREMENT,

id_empl INT UNSIGNED NOT NULL,

PRIMARY KEY(id),

CONSTRAINT `constraint1` FOREIGN KEY (`id_empl`) REFERENCES `employees` (`id_empl`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='my offices';

Yaina Villafañes answered 2019-07-31T23:43:14Z

0 votes

刚提到MyISAM。 只需尝试添加ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 2; 在声明的最后,假设您的其他表是使用MyISAM创建的。

CREATE TABLE IF NOT EXISTS `tablename` (

`key` bigint(20) NOT NULL AUTO_INCREMENT,

FOREIGN KEY `key` (`key`) REFERENCES `othertable`(`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

Damir Olejar answered 2019-07-31T23:43:41Z

0 votes

在我的情况下,它发生在一个表是InnodB而另一个表是MyISAM时。 通过MySQL Workbench改变一个表的引擎,为我解决了问题。

rkawano answered 2019-07-31T23:44:07Z

0 votes

我有相同的错误消息。 最后我发现我拼错了命令中表格的名称:

ALTER TABLE `users` ADD FOREIGN KEY (country_id) REFERENCES country (id);

ALTER TABLE `users` ADD FOREIGN KEY (country_id) REFERENCES countries (id);

我想知道为什么地球上的mysql不能告诉这样的表不存在...

Csongor Halmai answered 2019-07-31T23:44:42Z

mysql 错误号1005_mysql - 错误代码:1005。无法创建表'...'(错误号:150)相关推荐

  1. mysql 1050_sql-MySQL“如果不存在则创建表”-错误1050

    sql-MySQL"如果不存在则创建表"->错误1050 使用命令: CREATE TABLE IF NOT EXISTS `test`.`t1` ( `col` VARCH ...

  2. android sqlite 创建空表,sqlite3在android中创建表错误(sqlite3 create table error in android)...

    sqlite3在android中创建表错误(sqlite3 create table error in android) 我试图在android中使用sqlite3创建表我的开放助手是这样的: pub ...

  3. flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表

    标签: # 转载请留言联系 ORM 是什么? ORM,Object-Relation Mapping.意思就是对象-关系映射.ORM 主要实现模型对象到关系数据库数据的映射. 优点 : 只需要面向对象 ...

  4. sqlserver 2008修改数据库表的时候错误提示“阻止保存要求重新创建表的更改”...

    当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改,如果强行更改会出现以下提示:不允许保存更改.您所做的更改要求删除并重新创建以 ...

  5. mysql hy000 1005,mysql – ERROR 1005(HY000):无法创建表(errno:150)

    当我尝试在 mysql中创建一个表时,我收到一个错误. 任何提示解决吗? create table stock_in( ind int not null auto_increment, itemcod ...

  6. php1064,PHP创建表错误1064

    我试图在mySQL中创建一个表.这是我下面的php页面,当我运行页面时没有错误但是表格不在mySQL中,当我在mySQL中测试代码时我得到了错误 #1064 – You have an error i ...

  7. mysql交互式创建表_用mysql语句创建数据表详细教程

    MySQL不仅用于表数据操纵,而且还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 一般有两种创建表的方法: 1.使用具有交互式创建和管理表的工具: 2.表也可以直接用MySQL语句操纵. ...

  8. mysql创建表参数_MySQL创建数据表(CREATE TABLE语句)

    在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...

  9. mysql怎么建表_mysql如何创建表

    在mysql中,可以使用"CREATE TABLE"语句创建表:其语法格式为"CREATE TABLE ([表定义选项])[表选项][分区选项];",其中&qu ...

最新文章

  1. 马歇尔·赫伯特:人工智能的前沿技术与实例分析
  2. 安装pyspider后运行pyspider all后遇到的问题
  3. 中秋之晚开始 编程语言学习之路
  4. LeetCode 92. Reverse Linked List II
  5. flexbox 伸缩布局
  6. 真假难辨!全球首位AI合成女主播正式上岗 引发全球媒体圈关注
  7. 【Siddhi 5】Siddhi 自定义函数@Extension使用
  8. iptables基础(01)
  9. React Native Android 8081端口占用问题
  10. 如何在ionic5 release版本降级安装ionic3
  11. html压缩包怎么打开,展示电脑rar压缩包文件怎么打开?教你正确打开方式
  12. python文件开头含义
  13. 邦有道则智邦无道则愚
  14. linux 串口发送 内核,使用串口线真机调试Linux内核
  15. 杭州(含嘉兴,绍兴,金华,湖州,义乌)Uber优步司机奖励政策(1月25日~1月31日)...
  16. ipad全系列_为iPad提供全职工作
  17. 2.8 将一个整型变量的值赋给一个布尔型变量,再将这个布尔型变量的值赋给一个整型变量,得到的值是多少?
  18. 爬取历史天气数据并绘制成折线图
  19. 离心泵水力设计——叶轮设计——3 中间流线
  20. Prometheus + AlertManager + Prometheus-webhook-dingtalk的告警通知

热门文章

  1. 网站压缩包怎么传服务器,怎么把压缩包传到云服务器
  2. 产品数据分析的三个层次
  3. 2021年计算机三级部分题库记录
  4. 计算机类双万计划院校,2021双一流高校名单公布排序-附2020入选双万计划大学名单...
  5. CSS实现文本超过部分,超出两行,超出部分省略号显示
  6. 一个socket端口最多可以有多少长连接
  7. 【微服务】在window下安装nacos以及可能遇到的问题
  8. 操作系统—进程调度—HRRN,RR 高响应比和时间片轮转算法
  9. 【HGE 教程02】简单的游戏背景(2)
  10. jquery节点追加