CREATE TABLE 后表不存在
Posted
技术标签:
【中文标题】CREATE TABLE 后表不存在【英文标题】:Table doesn't exist after CREATE TABLE 【发布时间】:2011-12-29 19:56:58 【问题描述】:我正在尝试在我的数据库名称 symfony 中导入此 sql
CREATE TABLE IF NOT EXISTS ingredient (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我明白了
#1146 - Table 'symfony.ingredient' doesn't exist
这似乎很奇怪,因为我在这里尝试创建这个表,所以......为什么它不起作用? 如果我尝试,我会遇到同样的问题
CREATE TABLE symfony.ingredient
或者symfony 2中的特性
c:\Dev\Symfony>php app/console doctrine:schema:create
PS:我只有新版本的xampp才有这个问题。
编辑
嗯,我设法解决了我的问题。 我删除了我的数据库,然后创建了一个(不是使用界面),最后我重新启动了 mysql 服务。 我不知道为什么以及如何让我感到困惑,但我希望这会对某人有所帮助。
【问题讨论】:
同意。我不得不删除数据库,重新启动到 mysql 服务器,然后重新创建所有内容,它工作正常。谢谢。 谢谢大家,“创建表后表不存在”让我发疯! 【参考方案1】:嗯,你确定你有一个数据库并且有权执行 CREATE 语句。
如果你有 phpmyadmin:
要测试第一个可能性,创建一个新的(空的)测试数据库,在菜单中单击它并 然后按顶部导航中的 SQL 按钮并再次复制粘贴您的语句。如果这不起作用,请尝试第二个。
第二次您可以单击“主页”按钮,然后转到“权限”。如果只有两个或三个帐户,但都具有 root 权限,则您有权执行 CREATE。否则,您可以检查您的帐户并授予自己权限。
如果这两种可能性都没有解决,我也不知道。对我来说效果很好:(
【讨论】:
遗憾的是,我以 root 身份登录,并使用 Phpmyadmin 测试我的查询。真正奇怪的是 CREATE TABLE symfony_ingredient 实际上正在工作,但这不是我想要的。我认为前缀有问题。 啊,是的,那我恐怕无法帮助您,因为我无法重现该错误,也无法看到任何可能导致该错误的原因。祝你好运:)【参考方案2】:我遇到了同样的问题。 我的解决方案: 在创建表查询中更改表名,执行它,然后重命名表。
然后,您也可以删除此表并在创建它之后不会出错。
【讨论】:
这对我不起作用。尝试将另一个表重命名为我想要的名称时出现表已存在错误。 奇怪,但这行得通,在创建语句中更改名称,然后在成功创建表后将其重命名为需要的原始名称。有人可以解释一下这里发生了什么吗?【参考方案3】:对我有用的是:
转到文件夹 xampp/mysql/data/database-name/ 您只会看到.frm
文件。空表缺少文件 .MYD
和 .MYI
。
删除.frm
文件。
停止 MySQL 进程并重新启动它。
之后我就可以创建表了。
旧版本的 xampp 以 MyISAM 格式创建表,新版本为 InnoDB!
【讨论】:
在 Ubuntu 上的文件在 /var/lib/mysql/[database-name] 是的!这对我也有用。请记住,它通常是我遇到了同样的问题:#1146 - 表 'tutsplus_ci.posts' 不存在。我按照以下步骤解决了这个问题:
我在 sql 文件中导出了犯罪表。我注意到 .sql 文件中的表名有一个补充的尾随空格。 我在表的操作部分切换回 phpmyadmin,并将表从“帖子”重命名为“帖子”。采取所有这些措施后,错误没有出现。
总而言之,确实如错误消息所述,表“帖子”不存在。因为表的实际名称是“posts”而不是“posts”。在 phpmyadmin 中很难注意到名称前的空格。这就是故事。没什么特别的。 我希望它有帮助!
【讨论】:
【参考方案5】:我遇到了同样的问题。创建表时我收到“服务器已离开”消息,之后我收到表不存在消息,但我无法尝试重新创建表,因为后来我收到一条消息说它确实存在。我通过在命令行执行它来解决它:
mysqlcheck --repair --all-databases -u root -p
在此之后重启 mysql 服务器也没有什么坏处,以防万一。
【讨论】:
@aowie1 实际上,它确实适用于 InnoDB,但是我的服务器上发生的任何事情都可能与您的服务器上发生的不同。甚至manual 也谈到了 InnoDB 表。【参考方案6】:在 phpadmin 中进入数据库,在 sql 中删除表。然后创建表。
【讨论】:
【参考方案7】:win 和 mac 中可能大小写,fs 不区分大小写
lower_case_table_names=1
参考https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names
【讨论】:
以上是关于CREATE TABLE 后表不存在的主要内容,如果未能解决你的问题,请参考以下文章
iptables v1.4.14: can't initialize iptables table `nat': 表不存在(需要insmod吗?)