[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 服務,應該就可以再次創建對應的數據庫以及表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM