Mysql

MySQL - 更改表失敗,因為工作台嘗試創建現有表

  • September 4, 2018

我一直在嘗試使用 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和使用COPYalter 算法,則操作所需的空間與整個表的大小一樣多。

檢查以下命令的輸出:

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 的問題。你有錯誤日誌的輸出嗎?這也可能會有所幫助。

引用自:https://dba.stackexchange.com/questions/91483