我想將列資料型別從 text 更改為 varchar(256) 并且表中有很多資料是否有可能遇到資料丟失或錯誤?還是停機?
uj5u.com熱心網友回復:
假設您在 MySQL 8 上使用 Innodb 表,更改列的型別需要重寫表。
alter table將等到所有正在進行的寫入完成(插入、更新、洗掉),然后在執行復制時讀取鎖定表。只允許選擇。插入、更新和洗掉都將等到復制完成。
使用 COPY 演算法的 ALTER TABLE 操作等待正在修改表的其他操作完成。對表副本應用更改后,將資料復制過來,洗掉原始表,并將表副本重命名為原始表的名稱。當執行 ALTER TABLE 操作時,原始表可以被其他會話讀取(除了后面提到的例外)。在 ALTER TABLE 操作開始后開始的對表的更新和寫入會停止,直到新表準備好,然后自動重定向到新表。
復制完成后,它將短暫鎖定表以完成復制。
前面提到的例外是 ALTER TABLE 在準備好從表和表定義快取中清除過時的表結構時阻止讀取(而不僅僅是寫入)。此時,它必須獲得一個排他鎖。為此,它會等待當前讀取器完成,并阻止新的讀取和寫入。
如果您的任何文本值超過 255 個字符,您將丟失資料;值將被截斷。
text 和 varchar 之間沒有太大的實際區別,因此在大表上進行這種更改的價值是值得懷疑的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518122.html
標籤:mysql
上一篇:未連接到服務器時如何訪問資料庫?
