我遇到RENAME語句與CREATE TABLE語句衝突導致死鎖的問題。MySQL RENAME和CREATE TABLE語句發生衝突問題
我有形式
CREATE TABLE `ProductTitles`
(
PRIMARY KEY (`ProductId`),
INDEX (`Title`, `ProductScore`)
)
SELECT p.ProductId, p.Title, ps.ProductScore
FROM Products p
JOIN ProductScores ps USING (ProductId)
由於表大小的CREATE TABLE語句,這可能需要大約30分鐘才能完成。
RENAME TABLE
Products TO ProductsOld,
ProductsNew TO Products
此重命名的語句然後鎖定Products表進行讀取和寫入,直到:
的問題時,當另一個進程嘗試使用以下格式的重命名聲明,以取代Products表此語句運行時出現CREATE TABLE語句已完成。
我的問題是如何避免這種情況?
是否可以使用鎖,或者查詢是否存在CREATE TABLE語句,以避免在CREATE語句完成之前運行RENAME語句?
據我所知,無論是使用MyISAM還是InnoDb,都會發生這種情況。必須有一些機制來防止這種情況的發生。