Özet: Bu eğitimde, MySQL görünümleri hakkında bilgi edinecek ve görünümleri etkili bir şekilde manipüle etmeyi öğreneceksiniz.
Aşağıdaki tabloları inceleyelim: örnek veritabanındaki “islem”, “ogrenci” ve “kitap”.

Aşağıdaki sorgu yukarıdaki üç tabloyu kullanarak kitap almış ve teslim etmiş öğrencileri aldıkları kitap isimleri ile birlikte getirmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT ogrenci.ogrno, ogrenci.ograd, ogrenci.ogrsoyad, ogrenci.sinif, kitap.kitapno, kitap.kitapad, islem.atarih, islem.vtarih FROM ogrenci JOIN islem ON islem.ogrno = ogrenci.ogrno JOIN kitap ON islem.kitapno = kitap.kitapno WHERE islem.vtarih IS NOT NULL |
Bir sonraki seferde en çok tercih edilen kitap yada en çok kitap okuyan öğrenci gibi bir sorgu yapmak istediğimizde bu tabloyu tekrardan kullanabiliriz.
Bu sorguyu sonucunu elde tutmak için yada txt yada sql dosyası olarak saklayabiliriz. Gerektiğinde bunları tekrardan açıp kullanırız.
Ancak bu çok sağlıklı bir yöntem olmayacaktır. Bunun için MySQLde VIEWS( görünümleri) kullanabiliriz.
Doğru tanımı ile bir VIEW, veri tabanı kataloğunda saklanmış isimlendirilmiş bir sorgudan başkası değildir.
Yukarıdaki sorguyu daha sonra tekrar kullanmak için VIEW olarak veritabanı kataloğuna ekleyeceğiz.
MySQL Görünüm Oluşturma
Yeni bir görünüm oluşturmak için CREATE VIEW ifadesini kullanırsınız. Bu ifade, yukarıdaki sorguya dayalı olarak ogrenci_kitap adlı bir görünüm oluşturur:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CREATE VIEW ogrenci_kitap AS SELECT ogrenci.ogrno, ogrenci.ograd, ogrenci.ogrsoyad, ogrenci.sinif, kitap.kitapno, kitap.kitapad, islem.atarih, islem.vtarih FROM ogrenci JOIN islem ON islem.ogrno = ogrenci.ogrno JOIN kitap ON islem.kitapno = kitap.kitapno WHERE islem.vtarih IS NOT NULL |
CREATE VIEW ifadesini çalıştırdıktan sonra, MySQL görünümü oluşturur ve veritabanında saklar.
Bir VIEW oluşturulduğunda veri tabanında aşağıdaki gibi bir görünüme sahip olacaktır.(Not: HeideSQL)

Şimdi, SQL ifadelerinde bu görünümü bir tablo olarak referans olarak kullanabilirsiniz. Örneğin, ogrenci_kitap görünümünden veri sorgulayabilirsiniz:
1 2 3 4 | SELECT * FROM ogrenci_kitap WHERE ogrno = 25 |
Yukarıdaki sorgu 25 numaralı öğrencinin işlem yapmış olduğu kitapları göstermektedir.
Ayrıca, MySQL size hiçbir tabloya referans yapmayan bir görünüm oluşturma imkanı sağlar. Ancak, bu tür bir görünümü pratisyenlikte nadiren bulabilirsiniz.
Örneğin, aşağıdaki sorguyu çalıştırarak haftanın 7 gününü döndüren gunler adlı bir görünüm oluşturabilirsiniz:
1 2 3 4 5 6 7 8 9 10 11 | CREATE VIEW gunler(gunadi) AS SELECT 'Pazartesi' UNION SELECT 'Salı' UNION SELECT 'Çarşamba' UNION SELECT 'Perşembe' UNION SELECT 'Cuma' UNION SELECT 'Cumartesi' UNION SELECT 'Pazar'; |
Sorguyu çalıştırmak için;
1 2 3 | SELECT * FROM gunler |
Aşağıdaki gibi bir ekran çıktısı oluştur.

MySQL Görünümlerin Avantajları
MySQL görünümlerinin getirdiği avantajlar şunlardır:
- Karmaşık Sorguları Basitleştirme:
- Görünümler, karmaşık sorguları basitleştirmeye yardımcı olur. Eğer sıkça kullanılan karmaşık bir sorgunuz varsa, buna dayalı bir görünüm oluşturabilirsiniz. Böylece sorguyu tekrar yazmak yerine basit bir SELECT ifadesi kullanarak görünüme referans yapabilirsiniz.
- İş Mantığını Tutarsız Kılmama:
- Her sorguda aynı formülü sürekli olarak yazmanız gerekiyorsa veya karmaşık iş mantığına sahip bir sorgunuz varsa, bu mantığı görünüm içinde saklayarak ve karmaşıklığı gizleyerek bu mantığı sorgular arasında tutarlı hale getirebilirsiniz.
- Ek Güvenlik Katmanları Eklemek:
- Bir tablo, kişisel ve bankacılık bilgileri gibi hassas verileri içerebilir.
- Görünümler ve yetkiler kullanarak, kullanıcıların erişebileceği verileri sınırlayabilir ve sadece gerekli veriyi onlara açabilirsiniz.
- Örneğin, “employees” tablosu, SSN ve adres bilgilerini içerebilir ve bu bilgilere sadece İnsan Kaynakları departmanının erişmesi gerekebilir. Genel İdare (GA) departmanına ise ad, soyad ve cinsiyet gibi genel bilgileri sunmak için bu sütunlara dayalı bir görünüm oluşturabilir ve GA departmanı kullanıcılarına bu görünüme erişim izni verebilirsiniz.
- Geriye Uyum Sağlama:
- Eski sistemlerde, görünümler geriye uyumu sağlayabilir.
- Örneğin, büyük bir tabloyu birçok küçük tabloya normalize etmek istiyorsunuz ve bu tabloya referans veren mevcut uygulamaları etkilemek istemiyorsunuz. Bu durumda, yeni tablolara dayalı olarak adı aynı olan bir görünüm oluşturabilirsiniz, böylece tüm uygulamalar, görünümü bir tablo gibi referans alabilir.
- Unutmayın ki bir görünüm ve bir tablo aynı isme sahip olamaz, bu nedenle aynı isimde bir görünüm oluşturmadan önce tabloyu silmeniz gerekebilir.
MySQL Görünümü Yeniden Adlandırma
MySQL’de, görünümler ve tablolar aynı ad alanını paylaşırlar. Bu nedenle, bir görünümü yeniden adlandırmak için RENAME TABLE ifadesini kullanabilirsiniz.
Bir görünümü yeniden adlandırmak için RENAME TABLE ifadesinin temel sözdizimi şu şekildedir:
1 2 3 | RENAME TABLE old_view_name TO new_view_name; |
- old_view_name: Yeniden adlandırılmak istenen mevcut görünümün adı.
- new_view_name: Görünüme verilecek yeni ad.
Örnek kullanım:
1 2 3 | RENAME TABLE ogrenci_kitap TO ogrenci_kitaplar; |
Bu örnekte, “ogrenci_kitap” adlı bir görünümü “ogrenci_kitaplar” olarak yeniden adlandırır. Bu işlem, görünümün adını değiştirmenin yanı sıra, görünümün tanımlandığı sorguyu değiştirmez; sadece adı değişir.
MySQL Görünüm Düşürme
DROP VIEW ifadesi, bir görünümü veri tabanından tamamen siler. İşte DROP VIEW ifadesinin temel sözdizimi:
1 2 3 | DROP VIEW [IF EXISTS] view_name; |
- IF EXISTS: Bu isteğe bağlı bir bölümdür. Eğer belirtilirse ve veritabanında
view_name
adlı bir görünüm mevcut değilse, hata vermez ve sadece devam eder. Eğer belirtilmezse veview_name
adlı bir görünüm bulunmazsa bir hata alırsınız. - view_name: Silinmesi istenen görünümün adı.
Örnek kullanım:
1 2 3 | DROP VIEW IF EXISTS ogrenci_kitaplar; |
Bu örnekte, eğer “ogrenci_kitaplar” adlı bir görünüm varsa, bu görünümü siler. Eğer “ogrenci_kitaplar” adlı bir görünüm yoksa, herhangi bir hata vermez.
Bu sözdiziminde, DROP VIEW anahtar kelimelerinden sonra silmek istediğiniz görünümün adını belirtirsiniz. İsteğe bağlı IF EXISTS seçeneği, görünümün yalnızca varsa koşullu olarak kaldırılmasını sağlar.
Birçok görünümü tek bir ifadeyle kaldırmak için aşağıdaki sözdizimini kullanabilirsiniz:
1 2 3 | DROP VIEW [IF EXISTS] view_name1, view_name2, ...; |
- IF EXISTS: Bu isteğe bağlı bir bölümdür. Eğer belirtilirse ve veritabanında belirtilen tüm görünümler mevcut değilse, hata vermez ve sadece devam eder. Eğer belirtilmezse ve herhangi bir görünüm bulunmazsa bir hata alırsınız.
- view_name1, view_name2, …: Silinmesi istenen birden fazla görünümün adları. Bu adlar arasında virgülle ayrım yapılır.
Örnek kullanım:
1 2 3 | DROP VIEW IF EXISTS view1, view2, view3; |
Bu örnekte, IF EXISTS belirtilmişse ve belirtilen görünümler mevcut değilse hata vermez. Belirtilen görünümler varsa, bu görünümleri siler. Eğer IF EXISTS belirtilmemişse ve herhangi bir görünüm bulunmazsa, bir hata alırsınız.
Yorum Yap