Soruyu duymak beni iki açıdan düşündürüyor:
GÖRÜNÜM 1: Fonksiyonların DETERMİNİSTİK OLMASI
Bu durumda, bu, bir fonksiyonun belirli bir parametre seti için aynı dönüş verisini tutarlı bir şekilde sunması gerektiği anlamına gelir, FONKSİYONU ARAMADIĞINIZ ÖNEMLİ DEĞİLDİR.
Şimdi, fonksiyondaki statik SQL'e dayanarak günün farklı saatlerinde veri toplanması nedeniyle farklı bir cevap üreten bir fonksiyon düşünün. Bir anlamda, aynı parametre kümesi verildiğinde, her seferinde aynı tablo ve sütun kümesini sorgularsanız, yine de DETERMINISTIC olarak düşünülebilir.
Dinamik SQL ile bir işlevin temel tablolarını değiştirebilirseniz ne olur? Bir DETERMINISTIC işlevinin tanımını ihlal ediyorsunuz.
MySQL'in /etc/my.cnf dosyasına bu seçeneği eklediğine dikkat edin
log-bin-trust-function-creators
Her ne kadar bu bir aşırı basitleştirme olsa da, bu işlevlerin DETERMINISTIC özelliğini kesin olarak uygulamadan ikili günlüklere veri yazmasına izin verilmesine izin verir.
GÖRÜNÜM 2: Tetikleyiciler geri alınabilmelidir
- Bir işlevle aynı davranışlara sahip bir tetikleyici düşünebilir ve daha sonra karışıma Dinamik SQL ekleyebilir misiniz?
- Tetikleyicinin amaçlandığı temel tabloya MVCC'yi uyguladıktan sonra Dinamik SQL'e karşı MVCC (Multiversion Concurrecy Control) uygulamaya çalıştığınızı hayal edebiliyor musunuz?
Aslında sadece MVCC'de kuadratik (hatta katlanarak) büyüyen verilere sahip olacaksınız. DETERMINISTIC olmayan tetikleyicilerle SQL'in geri alınmasını yönetme süreci, en azından söylemek gerekirse, oldukça karmaşık olacaktır.
Bu iki yönün ışığında, eminim MySQL Geliştiricileri bunları düşündü ve kısıtlamalar uygulayarak onları hızla görevden aldı.
Öyleyse, Prosedür kısıtlamasını neden kaldırmalıyım? Basitçe söylemek gerekirse, DETERMINISTIC özellikleri veya Geri Alma ile ilgili bir endişe yoktur.