2012-04-23 12 views
5

İnternetten arama yaptım ve bir mağaza prosedürünün gövdesini değiştirmenin tek yolunun bırakarak ve yeniden oluşturduğunu anladım. Mekanizma ile ilgili bir sorun yok gibi görünüyor, ancak sunucu veritabanındaki bazı verileri güncellemek için mağaza prosedürünü çağırmaya devam eden bir istemci uygulamasına (veya binlerce dağıtılmış istemciye) sahip olursam, yordamı bırakmak veri kaybına ve/veya bozulmaya neden olabilir.MySQL: Saklı yordamlar atomik olarak nasıl değiştirilir?

"CREATE PROCEDURE IF EXIST ..." gibi bir sözdizimi varsa veya benzer bir işlev varsa, güncelleme işleminin sorunsuzca gerçekleştirileceğini düşünüyorum. Yine de MySQL'de böyle bir şey bulunamamıştım.

Peki bu sorunun nasıl ele alınabileceğini düşünüyorsunuz? Harika düşünceler?

+0

MySQL'in işlemsel DDL'si olmadığı için bunun mümkün olacağını düşünmüyorum. –

cevap

3

Kayıtlı bir yordamı (özelliklerini değiştirebilmenize rağmen) MySQL'de değiştiremezsiniz. ALTER PROCEDURE sayfasından.

Bu ifade, depolanmış bir prosedürünün özelliklerini değiştirmek için kullanılabilir. ALTER PROCEDURE ifadesinde birden fazla değişiklik belirtilebilir. Ancak, bu deyimi kullanarak saklı yordamının parametrelerini veya gövdesini değiştiremezsiniz; Bu değişiklikleri yapmak için , bırakın ve DROP PROSEDÜR ve CREATE PROSEDÜR kullanarak yordamı yeniden oluşturmanız gerekir. Bu güncelleştirmeyi gerçekleştirirken verileri kaybetmek mümkün olsa da (nispeten küçük bir pencere olsa da), verilerinizin bozulmaması olası değildir. Sisteminizin veritabanı kapalı kalma süresinden kaynaklanan veri kaybına karşı korunması gerekiyorsa, mesaj kuyruklama teknolojilerine bir göz atacağım.

+0

Veriler bozulduğunda Veritabanının bütünlüğünü kastettim ... Orada iyi bir nokta var, bu yüzden tüm işi veritabanına koymak yerine veri işlemlerini gözden kaçırmak için üstte ayrı bir katman olabilir. –