zoukankan      html  css  js  c++  java
  • [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 服务,应该就可以再次创建对应的数据库以及表。

  • 相关阅读:
    Valid Anagram
    Spiral Matrix II
    Spiral Matrix
    Kth Smallest Element in a BST
    Count Primes
    javascript 判断浏览器
    javascript 数值交换技巧
    EntityFramework 6 分页模式
    JSON.parse 和 JSON.stringify
    CSS z-index
  • 原文地址:https://www.cnblogs.com/memento/p/4678113.html
Copyright © 2011-2022 走看看