ALTER TABLE將表更改為當前字符集。如果在執行ALTER TABLE操作期間遇到重復鍵錯誤,原因在於新的字符集將2個鍵映射到了相同值,或是表已損壞。在後一種情況下,應在表上運行REPAIR TABLE。
如果ALTER TABLE失敗並給出下述錯誤,問題可能是因為在ALTER TABLE操作的早期階段出現MySQL崩潰,沒有名為A-xxx或B-xxx的舊表:
Error on rename of './database/name.frm' to './database/B-xxx.frm' (Errcode: 17)
在該情況下,進入MySQL數據目錄,並刪除其名稱為以A-或B-開始的所有文件(或許你希望將它們移動到其他地方而不是刪除它們)。
ALTER TABLE的工作方式如下:
用請求的結構變化創建名為A-xxx的新表。
將所有行從原始表拷貝到A-xxx。
將原始表重命名為B-xxx。
將A-xxx重命名為原始表的名稱。
刪除B-xxx。
如果在重命名操作中出錯,MySQL將嘗試撤銷更改。如果錯誤很嚴重(盡管這不應出現),MySQL會將舊表保留為B-xxx。簡單地在系統級別上重命名表文件,應能使數據復原。
如果在事務性表上使用ALTER TABLE,或正在使用Windows或OS/2操作系統,如果已在表上執行了LOCK TABLE操作,ALTER TABLE將對表執行解鎖操作。這是因為InnoDB和這類操作系統不能撤銷正在使用的表。