MySQL - 更改表失敗,因為工作台嘗試創建現有表
我一直在嘗試使用 MySQL Workbench 在我的數據庫中的表中添加另一列。這會生成一個“ALTER TABLE”命令,然後由於嘗試“CREATE TABLE”失敗而失敗,因為該表已經存在,所以它不應該這樣做!輸出如下: -
ERROR 1114: The table 'Analysis' is full SQL Statement: ALTER TABLE `Patient`.`Analysis` ADD COLUMN `TestDateTime` DATETIME NULL AFTER `idResults` ERROR: Error when running failback script. Details follow. ERROR 1050: Table 'Patient' already exists SQL Statement: CREATE TABLE `Patient` ( `idAnalysis` int(11) NOT NULL, `idResults` int(11) DEFAULT NULL, `ResultPDF` mediumblob, `ResultCSV` mediumblob ) ENGINE=InnoDB DEFAULT CHARSET=latin1
隨著使用者需求的擴大,這個數據庫會隨著時間的推移而發展,我該如何添加這個額外的列?
謝謝你。
雖然這
CREATE TABLE
是一個奇怪的錯誤,應該進一步調查和/或報告以查看是否應該為 Workbench 執行故障回复操作,但您真正的問題是第一個:ERROR 1114: The table 'Analysis' is full
這表明引擎無法更改表,因為它已用完空間。這並不一定意味著數據庫的磁碟空間已用完,但 InnoDB 會針對該特定表執行此操作。例如,如果主表空間的大小是固定的,並且不使用
innodb_file_per_table=1
和使用COPY
alter 算法,則操作所需的空間與整個表的大小一樣多。檢查以下命令的輸出:
SHOW GLOBAL VARIABLES like 'innodb_data_file_path';
ibdata1
然後檢查MySQL 伺服器數據目錄上文件的大小和可用空間。您可能需要增加表空間的可用大小,使其成為自動增量或使用innodb_file_per_table=1
.
如果您的表中有很多記錄,請在此處查看我對相關問題的回答。
關於 MySQL Workbench,我一直認為該工具非常出色。
話雖如此,MySQL Workbench **“可能”**在後台做的是創建一個帶有額外欄位的空臨時表,複製所有記錄,刪除舊的 Patient 表並將臨時表重命名為 Patient,然後在創建時遇到問題“新”患者表。您必須檢查原始碼以確定發生了什麼 - 或者可能執行 SHOW TABLES;在執行更新時不斷地針對您的系統。
消息“表“分析”已滿”來自哪裡,我不知道 - 它是否存在於您的模式中?您的 MySQL 數據目錄是否有空閒磁碟空間,或者它是否越來越緊張?
在任何情況下,如果 GUI 工具出現故障,首先要做的是
mysql
從命令行工具執行命令(另一個更喜歡命令行的原因),以確保您真正處理的是 MySQL 問題而不是 Workbench 的問題。你有錯誤日誌的輸出嗎?這也可能會有所幫助。