Mysql 1050错误"表已经存在",实际上它没有

Cit*_*zen 69 mysql sql mysql-error-1050 mysql-error-1146

我正在添加这个表:

CREATE TABLE contenttype (
        contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT,
        class VARBINARY(50) NOT NULL,
        packageid INT UNSIGNED NOT NULL,
        canplace ENUM('0','1') NOT NULL DEFAULT '0',
        cansearch ENUM('0','1') NOT NULL DEFAULT '0',
        cantag ENUM('0','1') DEFAULT '0',
        canattach ENUM('0','1') DEFAULT '0',
        isaggregator ENUM('0', '1') NOT NULL DEFAULT '0',
        PRIMARY KEY (contenttypeid),
        UNIQUE KEY packageclass (packageid, class)
);
Run Code Online (Sandbox Code Playgroud)

我得到一个1050"桌子已经存在"

但该表不存在.有任何想法吗?

编辑:更多细节,因为每个人似乎都不相信我:)

DESCRIBE contenttype
Run Code Online (Sandbox Code Playgroud)

收益率:

1146 - 表'gunzfact_vbforumdb.contenttype'不存在

CREATE TABLE gunzfact_vbforumdb.contenttype(
contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT ,
class VARBINARY( 50 ) NOT NULL ,
packageid INT UNSIGNED NOT NULL ,
canplace ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cansearch ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cantag ENUM( '0', '1' ) DEFAULT '0',
canattach ENUM( '0', '1' ) DEFAULT '0',
isaggregator ENUM( '0', '1' ) NOT NULL DEFAULT '0',
PRIMARY KEY ( contenttypeid ) ,
Run Code Online (Sandbox Code Playgroud)

产量:

1050 - 表'contenttype'已存在

Nul*_*ion 70

听起来你有Schroedinger的桌子 ......

说真的,你可能有一张破桌.尝试:

  • DROP TABLE IF EXISTS contenttype
  • REPAIR TABLE contenttype
  • 如果您有足够的权限,请删除数据文件(在/ mysql/data/db_name中)

  • 我最近也有这个问题.这篇文章帮我解决了.但是,在同一个表上执行DROP TABLE IF EXISTS后跟一个REPAIR TABLE会因为在不存在的表上调用修复而导致错误.只做DROP TABLE IF EXISTS似乎对我有用. (5认同)
  • > REPAIR TABLE contenttype USE_FRM产生gunzfact_vbforumdb.contenttype修复错误无法打开表gunzfact_vbforumdb.contenttype修复状态操作失败所以我们越来越接近但仍然没有解决方案.我不知道表中是否有必要的数据,还有其他方法可以解决吗?我跑了一个没有运气的myisamchk. (2认同)

小智 32

来自MySQL日志:

InnoDB: You can drop the orphaned table inside InnoDB by
InnoDB: creating an InnoDB table with the same name in another
InnoDB: database and copying the .frm file to the current database.
InnoDB: Then MySQL thinks the table exists, and DROP TABLE will
InnoDB: succeed.
Run Code Online (Sandbox Code Playgroud)


Cra*_*ker 14

我得到了同样的错误,并且REPAIR TABLE(来自@ NullUserException的答案)没有帮助.

我终于找到这个解决方案:

sudo mysqladmin flush-tables
Run Code Online (Sandbox Code Playgroud)

对我来说,没有sudo,我得到以下错误:

mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'
Run Code Online (Sandbox Code Playgroud)

(在OS X 10.6上运行)


小智 13

您可能需要刷新表缓存.例如:

DROP TABLE IF EXISTS `tablename` ;
FLUSH TABLES `tablename` ; /* or exclude `tablename` to flush all tables */
CREATE TABLE `tablename` ...
Run Code Online (Sandbox Code Playgroud)


Nak*_*l91 5

创建视图时我也遇到了同样的问题。该视图较早出现,由于一些更改,它被删除了,但是当我尝试再次添加它时,它向我显示“视图已存在”错误消息。

解决方案

您可以手动做一件事。

  1. 进入安装MySQL的文件夹
  2. 转到其中的数据文件夹。
  3. 选择您的数据库并进入其中。
  4. 数据库创建“.frm”格式文件。
  5. 删除特定表的文件。
  6. 现在再次创建该表。

它将成功创建表。