爱程序网

[Q&A] MySQL Error 1050(42S01): Table already exist

来源: 阅读:

【环境说明】

1:MySQL Server 5.5

2:MyEclipse 2014

3:JDK 1.7

 

造成该问题的可能原因:

1:用Java读取SQL文件,并执行其中的sql语句,但是中间执行错误,导致创建数据库或者创建表格失败;

2:在MySQL服务未关闭(进程中有mysqld.exe或mysql.exe)情况下,手动对MySQL的data目录下的数据库进行操作(删除、移动等)

 

解决办法:

1:使用命令

DROP TABLE IF EXISTS tablename;REPAIR TABLE tablename;

如下图所示:

2:考虑MySQL的存储引擎,默认的是default-storage-engine=InnoDB,如果创建的数据库的引擎是MyISAM,则要在配置文件my.ini中将语句做对应的修改

注:该方法在网上搜到的,本人尝试后发现不受该设置影响,不过您可以做一下尝试的。

MyISAM和InnoDB存储引擎的比较
主要区别:
•MyISAM是非事务安全型的,而InnoDB是事务安全型的。
•MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
•MyISAM支持全文类型索引,而InnoDB不支持全文索引。
•MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
•MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
•InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。
应用场景:
•MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
•InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提 高多用户并发操作的性能。

3:主要的原因大部分是因为还没有停止MySQL服务就手动对data目录下的数据库进行人工操作,导致虽然在目录下看不到该数据库以及其中的表格,或者通过命令也无法查找到对应的表格,但是无论如何都不能创建对应的表格,出现1050错误,原因是mysql服务的未关闭,导致存储空间中仍旧保留着该表的记录。

所以只要在停止服务后,再手动去data目录下删除该数据库,然后重启mysql服务,应该就可以再次创建对应的数据库以及表。

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助