top
Loading...
A.7.1.與ALTERTABLE有關的問題
A.7.1. 與ALTER TABLE有關的問題

ALTER TABLE將表更改為當前字符集。如果在執行ALTER TABLE操作期間遇到重復鍵錯誤,原因在于新的字符集將2個鍵映射到了相同值,或是表已損壞。在后一種情況下,應在表上運行REPAIR TABLE

如果ALTER TABLE失敗并給出下述錯誤,問題可能是因為在ALTER TABLE操作的早期階段出現MySQL崩潰,沒有名為A-xxxB-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,或正在使用WindowsOS/2操作系統,如果已在表上執行了LOCK TABLE操作,ALTER TABLE將對表執行解鎖操作。這是因為InnoDB和這類操作系統不能撤銷正在使用的表。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/problems.html
北斗有巢氏 有巢氏北斗