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