Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MySQL View Kullanımları
#1
Merhabalar,

Son derece basit bir dille view'lerden bahsetmeye çalışacağım bu sefer,

View'ler Mysql 5.0'dan sonra gelen bir sanal tablo özelliğidir. Üzerinde sadece Select sorguları gerçekleştirilebilir, update delete gibi tablo üzerinde değişiklik yapacak cümleler kullanılamaz. bu gibi işlemler gerçek tablolardan yapılmalıdır.

Peki View'leri neden kullanırız ?
View'leri sürekli kullanılan karmaşık sorguları kolaylaştırmak için kullanılır desem yanlış olmaz, Özellikle joinler kullanarak birden fazla 3 - 5 tabloya kanca atarak yaptığımız sorgularda bize büyük fayda sağlar.  Aşağıdaki örneklerle daha anlaşılır olacağını düşünüyorum.


Örnek kurgumuzda kendi tablomdan bir örnek vereyim, kullanıcılar sistemdeki bir duayı okuduklarında kullanıcı adı dua'nın id'si yazdığım bir minik tablom var, Tablomun boyutunu küçük tutmak için integer id'ler tutuyorum ama tekrar bu beğenen kullanıcıları okumak istediğimde bu anlamsız id'ler değil bana bu id'lerin sahipleri lazım olacak
Eğer basit bir tablonuzda kullanmanız gerekiyor ise mysql function 'da kullanabilirsiniz.

LZ6OYa.jpg


Peki ne yapacağız, Bu tablodan veri  sorgular iken user id ile user tabloma gidip bu userin adını, ve dua tabloma gidip bu duanın detayını almam gerekiyor iki JOIN kulanmam gerekiyor.
SELECT ld.duaid,duas.konu, ld.user_id,user.username, ld.date  FROM like_dua as ld
INNER JOIN user ON (ld.user_id=user.id)
INNER JOIN duas ON (ld.duaid=duas.id)

Yani böyle bir sorgu kullanmam gerekiyor her defasında, Örnekte verilen tablo basit küçük bir tablo ama büyük projelerde bu cümle onlarca satıra ulaşabilir.
Sorgumuzun sonucu bu şekilde,

PnVO57.jpg

Peki doğru bana lazım olan sonuç bu ama her defasında bu kodları yazmak zorunda mıyım ? Değilsiniz işte tam burada devreye view'ler giriyor.

Bu Görüntülenen sonucu view tablo haline getiriyoruz, kullanımı çok kolay yukarıdaki Select sorgusunun başına Create cümlemizi yazıyoruz

CREATE  VIEW dua_okuyanlar AS
SELECT ld.duaid,duas.konu, ld.user_id,user.username, ld.date  FROM like_dua as ld
INNER JOIN user ON (ld.user_id=user.id)
INNER JOIN duas ON (ld.duaid=duas.id)

dua_okuyanlar  adında bir View tablo oluşturduk. artık yukarıdaki sonuca ulaşmak için uzun uzun cümle yazmak yerine,
SELECT * FROM dua_okuyanlar
cümlesi ile aynı veriye (Her defasında Güncel) olarak ulaşabiliriz. 

Asıl tabloda veri silindiğinde de , ana tabloya veri eklendiğinde de bu sanal tablomuz güncellenecektir.

Umarım anlaşılır her kesimin anlayabileceği şekilde anlatabilmişimdir.
İyi Forumlar.
WWW
Cevapla
#2
Merhaba,
Sade, anlaşılır ve son derece kaliteli makale niteliğinde bir anlatım olmuş. Teşekkür ederim.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
Emeğinize sağlık...
There's no place like 127.0.0.1
WWW
Cevapla
#4
Merhaba,
Örnek olarak 2 adet VIEW olsun..
A ve B

B nin içinde A yı kullanmış olalım..
Daha sonra A da değişiklik yapmış olalım..
MSSQL de B görünümünü için de "exec sp_refreshView B" yaparak yenilememiz gerekebiliyor..
MYSQL de böyle bir işleme ihtiyaç duyuluyor mu?
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#5
(19-01-2017, Saat: 11:30)barutali Adlı Kullanıcıdan Alıntı: Merhaba,
Örnek olarak 2 adet VIEW olsun..
A ve B

B nin içinde A yı kullanmış olalım..
Daha sonra A da değişiklik yapmış olalım..
MSSQL de B görünümünü için de "exec sp_refreshView B" yaparak yenilememiz gerekebiliyor..
MYSQL de böyle bir işleme ihtiyaç duyuluyor mu?

Merhabalar , 
ilk view in ikinci viewden çağrılan alanlarının mevcudiyetinde bir değişiklik yoksa böyle bir gereksinim bulunmuyor.
Konuyla ilgili bir ek bilgi de ben paylaşmak isterim,
CREATE VIEW vwTest AS

SELECT * FROM tablom

şeklinde bir view oluşturduğunuzda view alanları fiziksel tablonun o anki tüm alanlarını içerek şekilde oluşturulur "tablom" isimli fizksel tabloya sonradan eklenecek alanlar oluşmuş view "*" ile seçmiş olsa dahi gelmez çünkü VIEW kaydedilirken "*" ile seçilen tablonun her bir alanını DDL içine kendi eklyerek yazar.

iyi çalışmalar.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MySQL json sunucu örneği esistem 3 308 25-12-2019, Saat: 11:04
Son Yorum: Halil Han Badem
  MySQL 8.0 Windows x86 (32Bit) Sürümü Download hi_selamlar 9 469 10-12-2019, Saat: 17:43
Son Yorum: uparlayan
  MySQL de Aynı tabloda ki 2 farklı alanı kıyaslayan sorgu vkamadan 4 470 23-10-2019, Saat: 18:23
Son Yorum: vkamadan
  [ÇÖZÜLDÜ] SQLite'dan MySQL'e Aktarma ? Mr.Developer 3 640 22-07-2019, Saat: 20:31
Son Yorum: Mr.Developer
  (ÇÖZÜLDÜ] MySQL Date_format komutu wiseman 1 492 30-05-2019, Saat: 11:30
Son Yorum: wiseman



Konuyu Okuyanlar: 1 Ziyaretçi