MySQL - 表不存在且无法创建
Posted
技术标签:
【中文标题】MySQL - 表不存在且无法创建【英文标题】:MySQL - Table does not exist and can not be created 【发布时间】:2016-09-12 07:15:56 【问题描述】:mysql 5.5.46 奇怪错误:表不存在,无法创建。
请问,有人可以帮忙吗?
drop table t_example;
返回:drop table t_example 错误代码:1051. Unknown table 't_example' 0.000 sec
CREATE TABLE t_example(
`id_example` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`des_example` VARCHAR(45) NOT NULL,
`id_example` int unsigned NULL,
PRIMARY KEY (`id_example`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
返回:错误代码:1050。表 't_example' 已存在
select * from t_example;
返回:错误代码:1146。表 't_example' 不存在
我正在使用:
UBUNTU 14.04 LTS; mysql Ver 14.14 Distrib 5.5.46,适用于使用 readline 6 的 debian-linux-gnu (x86_64)。 我使用的是 root 用户。试过了:
mysql> REPAIR TABLE t_example;
+----------------+--------+----------+--------------------------------------+
| Table | Op | Msg_type | Msg_text |
+ ---------------+--------+----------+--------------------------------------+
| mydb.t_example | repair | Error | Table 'mydb.t_example' doesn't exist |
| mydb.t_example | repair | status | Operation failed |
+----------------+--------+----------+--------------------------------------+
2 rows in set (0.00 sec)
也试过了:sudo mysqladmin flush-tables
...也没有解决问题!
真实示例:
mysql> use flexible;
Database changed
mysql> select * from st_fin_centro_custo;
ERROR 1146 (42S02): Table 'flexible.st_fin_centro_custo' doesn't exist
mysql> CREATE TABLE st_fin_centro_custo(
-> `cod_centro_custo` INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> `des_centro_custo` VARCHAR(45) NOT NULL,
-> PRIMARY KEY (`cod_centro_custo`))
-> ENGINE = InnoDB
-> DEFAULT CHARACTER SET = utf8
-> COLLATE = utf8_general_ci;
ERROR 1050 (42S01): Table '`flexible`.`st_fin_centro_custo`' already exists
mysql> drop table st_fin_centro_custo;
ERROR 1051 (42S02): Unknown table 'st_fin_centro_custo'
mysql>
尝试从 MySQL information_schema 中获取:
mysql> SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_TYPE
FROM information_schema.tables
where table_name like 'st_fin_centro_custo';
Empty set (0.00 sec)
mysql>
注意:使用其他名称创建表可以正常工作。
非常感谢!
【问题讨论】:
里面有没有你没有提到的USE
声明?
请发出命令show tables;
。
该表未与“显示表;”一起列出
首先,我选择了数据库:use mydatabase;
你确定你一直在同一个数据库中吗?
【参考方案1】:
首先,尝试重启mysqld
。如果没有帮助,请尝试将此表创建到另一个数据库中。然后将新创建的*.frm
文件复制到目标数据库文件夹。再重启一次mysqld
。现在尝试在适当的数据库中访问/删除/创建此表。
编辑:如果从头开始删除数据库并重新创建如何?我希望它不是一个生产系统。
【讨论】:
现在该表在“show tables;”中列出,但是当执行 SELECT 时,得到错误:mysql> select * from st_fin_centro_custo;错误 1146 (42S02):表 'flexible.st_fin_centro_custo' 不存在【参考方案2】:First select your data base schema by using use command<use schema>.
Then run DROP TABLE IF EXISTS t_example;
After that try to create your table
CREATE TABLE t_example(
`id_example` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`des_example` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id_example`))
ENGINE = INNODB
DEFAULT CHARACTER SET = UTF8
COLLATE = UTF8_GENERAL_CI;
Also don't use duplicate column name.
Another solution is :
Change table name in the create table query, execute it and then rename the table.
Then, you can also drop this table and after it create it without getting error.
【讨论】:
你能告诉我错误吗?因为我刚刚执行了这个并且它正在工作 不知何故,您丢失了 my_user.frm 和 my_user.ibd 文件。数据字典仍然有该表的条目。你不能运行 DROP TABLE my_user;因为 mysqld 首先查找 my_user.frm。由于这不是 my_user.frm,因此无法删除该表。虽然 my_user.frm 不存在,但您不能运行 CREATE TABLE my_user ... 因为 mysqld 认为创建表是可以的,但随后会推迟到存储引擎。 InnoDB 说“我已经注册了 my_user 的 tablespace_id”。 如果您使用 MyISAM 创建表,则可以证明这一系列事件。 mysqld 将允许它。切换到 InnoDB 后,它会立即返回到数据字典,该字典在该条目上是错误的。我有两个建议 SUGGESTION #1 不要再用那个名字创建表了。使用不同的表名 这将导致您更改应用程序代码中的表名 建议 #2 mysqldump 所有数据、触发器和存储过程备份 ibdata1 删除 ibdata1 重新加载 mysqldump *** 帖子中的详细步骤 [link] ***.com/questions/3927690/…【参考方案3】:您的表可能已损坏。
试试REPAIR TABLE t_example;
【讨论】:
以上是关于MySQL - 表不存在且无法创建的主要内容,如果未能解决你的问题,请参考以下文章