失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...

mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...

时间:2019-11-22 23:47:12

相关推荐

mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...

问题描述

曾遇到创建数据表报错问题,报错如下:

ERROR 1005 (HY000) at line 18: Can't create table 'db1.t2' (errno: 121)

通过日志查看有一条记录

InnoDB: Error: table `db1`.`t2` already exists in InnoDB internal

可见要创建的这个表已经存在,导致创建同名数据表报错,但是从数据库目录上查看确实没有这个表文件。

原因分析

事实上,导致这种情况是由于删除数据表时直接删除了源文件,而没有通过SQL命令来删除。这种错误的方法对MyISAM引擎的数据库有时候是管用的,但是对于InnoDB引擎的数据库则是一定不管用的。

因为对于InnoDB引擎的数据库,当创建一个表时,会在数据库目录中创建一个.frm格式(如t2.frm)的表结构文件,同时,内部地,InnoDB会为这个表向自己的数据目录添加一个条目。当把源文件(t2.frm)直接删除时,InnoDB内部数据目录中并没有删除对应的条目。

这时,你运行show tables,由于该命令是通过表结构文件检索的,自然查看不到这个表。

如果尝试重新导入数据,由于.sql文件中的语句写的是"drop table if exists 't2'",最终也会因查不到表而不去执行drop命令。

处理方法

1. 对于MyISAM引擎的数据库

如果之前删的表文件是空表文件,则可以直接create创建(这种情况不会出现上面的报错;如果之前删的是有数据的表文件,则直接创建是不管用的,需要先执行"drop table 表名",然后再重新创建该表即可。

2. 对于InnoDB引擎的数据库

可以先尝试执行"drop table 表名",然后再重新创建该表;如果仍有问题,则需要创建一个临时数据库,在临时数据库中创建一个同名数据表,然后将该表文件(只有一个.frm文件)复制到当前的数据库中,赋予mysql权限,然后再执行"drop table 表名",再重新创建该表即可。

喜欢 (0)or分享 (0)

如果觉得《mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。