6
A
回答
6
不幸的是需要MySQL來重命名一列(使用ALTER TABLE ... CHANGE COLUMN
)來運行一個完整的表副本。
結帳pt-online-schema-change。這有助於在ALTER期間不鎖定整個表的情況下對錶進行多種類型的ALTER更改。在將數據複製到新表中時,您可以繼續讀取和寫入原始表。通過觸發器捕獲更改並將其應用於新表。
例子:
pt-online-schema-change h=localhost,D=databasename,t=tablename \
--alter 'CHANGE COLUMN oldname newname NUMERIC(9,2) NOT NULL'
更新:的MySQL 5.6可以做一些類型的ALTER操作不重建表,並更改列的名稱是那些支持作爲一個在線的變化之一。請參閱http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html以瞭解哪些類型的改動可以支持或不支持。
0
如果沒有任何限制,就可以毫不費力地改變它,據我所知。如果您必須先刪除約束,請修改並添加約束。
0
更改包含多行的表可能需要很長時間(但如果所涉及的列未編入索引,則可能很簡單)。
如果你特別要避免使用專門爲此設立了ALTER TABLE語法,你總是可以創建具有幾乎相同的結構(但不同的名稱)的表,所有的數據複製到它,像這樣:
CREATE TABLE `your_table2` ...;
-- (using the query from SHOW CREATE TABLE `your_table`,
-- but modified with your new column changes)
LOCK TABLES `your_table` WRITE;
INSERT INTO `your_table2` SELECT * FROM `your_table`;
RENAME TABLE `your_table` TO `your_table_old`, `your_table2` TO `your_table`;
對於某些ALTER TABLE查詢,上面的查詢可能會快很多。但是,對於簡單的列名更改,它可能很簡單。我可能會嘗試創建一個相同的表並在其上執行更改以查看您實際查看的時間。
相關問題
- 1. 在不重新創建MySQL表的情況下恢復數據
- 2. 在不更改擴展名的情況下更改文件的結尾名稱
- 3. 如何在不創建頁面重新加載的情況下更改Firefox window.location.hash?
- 4. 在不重新加載頁面的情況下更改列表內容
- 5. 在不滾動列表的情況下重建容器列表
- 6. 在不更改構建文件的情況下設置Ant項目名稱
- 7. 在不重新啓動服務的情況下更改jobcron
- 8. 在不重新加載頁面的情況下更改URL
- 9. 在不重新啓動的情況下應用vimrc更改
- 10. 使用cookie名稱創建更新表mysql創建
- 11. 如何更改腳手架名稱而不重新創建?
- 12. 名稱...不會在目前情況下
- 13. 如何在不中斷服務的情況下重新命名/重新創建表格?
- 14. 如何在不更改擴展名的情況下重命名文件名
- 15. 如何在不知名的情況下重新命名約束
- 16. 如何在不更改憑據的情況下更新用戶
- 17. 如何在不更改rowversion的情況下更新記錄
- 18. 在不更改版本的情況下更新受管文檔
- 19. 在不更改app_id的情況下更新XAP sllauncher.exe
- 20. 如何在不更改項目列表的情況下更改listview內容
- 21. 在不重新啓動lighty的情況下更新.po文件
- 22. 如何在不重新編譯FLA的情況下更新SWF
- 23. 在不知道名稱的情況下更改發件人對象的屬性
- 24. Linq To Entities - 如何在表名稱爲參數的情況下創建查詢
- 25. 情況下,更新
- 26. 如何在不更改名稱服務器的情況下指向域
- 27. 如何在不丟失數據的情況下更改模型類名稱?
- 28. MySQL在排名情況下排名
- 29. PHP - 創建對象時如何在非法名稱的情況下分配新的名稱屬性?
- 30. 如何在不重新創建佈局的情況下旋轉方向更改的視圖?
只看到ALTER的語法。 –