J'ai un problème où une instruction RENAME se heurte à une instruction CREATE TABLE pour provoquer un blocage.Problème avec les instructions MySQL RENAME et CREATE TABLE en conflit
J'ai cela peut prendre CREATE TABLE de la forme
CREATE TABLE `ProductTitles`
(
PRIMARY KEY (`ProductId`),
INDEX (`Title`, `ProductScore`)
)
SELECT p.ProductId, p.Title, ps.ProductScore
FROM Products p
JOIN ProductScores ps USING (ProductId)
En raison de la taille des tables, environ 30 minutes.
Le problème se produit lorsque cette déclaration est en cours d'exécution lorsqu'un autre processus pour remplacer la table des produits en utilisant une instruction RENAME du formulaire:
RENAME TABLE
Products TO ProductsOld,
ProductsNew TO Products
Cette déclaration de changement de nom verrouille alors la table Produits pour lit et écrit jusqu'à ce que le L'instruction CREATE TABLE est terminée.
Ma question est de savoir comment éviter cette situation?
Est-il possible d'utiliser des verrous, ou peut-être d'interroger la présence d'une instruction CREATE TABLE, pour éviter d'exécuter l'instruction RENAME jusqu'à ce que l'instruction CREATE soit terminée?
Pour autant que je sache, cela se produit si vous utilisez MyISAM ou InnoDb. Il doit y avoir un mécanisme pour se protéger contre cela.