簡體   English   中英

如何使用正在使用的表來制作ALTER TABLE

[英]How to do an ALTER TABLE with a table in-use

我有一個在表上運行24-7的腳本,以對其執行必要的功能。 但是,當它運行時,幾乎不可能執行ALTER TABLE ADD INDEX語句,因為它似乎無限期地掛起。 有沒有辦法解決? 我應該如何添加該索引?

Alter表語句正在獲取元數據鎖定。 在同一張表上正在進行另一筆交易時,您無法執行alter語句。 由於您的腳本運行24-7,因此您無法執行所要求的操作。

為了確保事務可序列化,服務器不得允許一個會話對在另一會話中未完成的顯式或隱式啟動的事務中使用的表執行數據定義語言(DDL)語句。 服務器通過獲取事務中使用的表上的元數據鎖並將這些鎖的釋放推遲到事務結束之前來實現。 表上的元數據鎖可防止更改表的結構。 這種鎖定方法的含義是,一個會話中一個事務正在使用的表在事務結束之前不能被其他會話在DDL語句中使用。

你可以閱讀更多關於此這里在dev.mysql。

5.6版具有ALTER TABLE ... ALGORITHM=INLACE ...來執行ADD INDEX和其他幾個ALTER的功能,而不會阻塞所有內容。

pt-online-table-alter(來自Percona.com)可以在舊版本的MySQL中做到這一點。 它使用觸發器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM