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. 在不更改資源名稱的情況下更改URL
- 3. 如何在不重新創建表的情況下重命名錶
- 4. 在不創建新列的情況下修改值
- 5. 在不更改擴展名的情況下更改文件的結尾名稱
- 6. Android在不重新創建路徑的情況下更改用戶位置?
- 7. 如何在不創建頁面重新加載的情況下更改Firefox window.location.hash?
- 8. 在不重新加載頁面的情況下更改列表內容
- 9. 在不滾動列表的情況下重建容器列表
- 10. 如何在不創建新PDF的情況下更新PDF?
- 11. 在不更改用戶對象的情況下更改TreeNode的名稱
- 12. 在不更改構建文件的情況下設置Ant項目名稱
- 13. 在不重新啓動的情況下應用vimrc更改
- 14. 在不重新加載網頁的情況下更改標題
- 15. 在不重新啓動服務的情況下更改jobcron
- 16. 在不重新加載頁面的情況下更改URL
- 17. Windows在不創建新文件的情況下修改文本
- 18. 如何在避免重複的情況下創建列表?
- 19. 如何在不重新創建表的情況下更改表中的字段順序?
- 20. 如何在不允許插入的情況下創建MySQL表
- 21. 在不使用更改語句的情況下添加新列
- 22. 在不改變ggplot2中的顏色的情況下更改圖例名稱
- 23. 使用cookie名稱創建更新表mysql創建
- 24. 如何更改腳手架名稱而不重新創建?
- 25. Php MySQL僅在IP爲新的情況下更新列
- 26. 在不更改頁面名稱的情況下更改默認子頁面的名稱WordPress管理員
- 27. 名稱...不會在目前情況下
- 28. 如何在不中斷服務的情況下重新命名/重新創建表格?
- 29. 如何在不更改擴展名的情況下重命名文件名
- 30. 如何在不知名的情況下重新命名約束
只看到ALTER的語法。 –