PostgreSQL Development Essentials
indirmek için tıklayınız…
indirmek için tıklayınız…
Merhaba arkadaşlar
Uzun zamandır bir konu anlatmıyorum ancak hatalar ve düzeltilmeleri ile ilgili yazılar paylaşıyorum en kısa zamanda bir kaç güzel konu ile karşınızda olacağım 🙂
Sizlere bahsetmek istediğim kısa konum SQL de Kolon Adını Tablolarda Aramak: Diyelim ki database içersinde sadece kolon adını biliyorsunuz veya kolon adının içinden bir kelime hatırlıyorsunuz hangi tabloda merak ediyorsunuz işte size güzel bir sorgu 🙂 Bu sorgu ile kolon adına göre tablo araması yapabilirsiniz. İşte o sorgu 🙂
select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME like '%aranacak_kelime%' and TABLE_CATALOG='Database_Adi'
Umarım yararlı olur
Bilgiyle Kalın
M.Zeki OSMANCIK
Merhaba arkadaşlar
Sabahın köründe karşıma çıkan ilginç bir konuyu sizlerle paylaşmak istiyorum. LDF dosyası olmadan database oluşturabilir miyiz ? Cevabımız evet
Neden böyle birşey isteyelim ki demeyin isteyen istiyor 😀
İşte gerekli scrip 😀
Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki OSMANCIK
Merhaba gençler 🙂
Veritabanındaki tablo sayısı nı öğrenmek için aşağıdaki sorguyu çalıştırabilirsiniz 😉
Umarım yararlı olur
Bilgiyle Kalın
M.Zeki Osmancık
CREATE PROCEDURE dbo.GetProductsPaged
(
@startRowIndex int,
@maximumRows int
)
AS
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit,
UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
CategoryName, SupplierName
FROM
(
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit,
UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
(SELECT CategoryName
FROM Categories
WHERE Categories.CategoryID = Products.CategoryID) AS CategoryName,
(SELECT CompanyName
FROM Suppliers
WHERE Suppliers.SupplierID = Products.SupplierID) AS SupplierName,
ROW_NUMBER() OVER (ORDER BY ProductName) AS RowRank
FROM Products
) AS ProductsWithRowNumbers
WHERE RowRank > @startRowIndex AND RowRank <= (@startRowIndex + @maximumRows)
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY id ASC) AS rownumber,
id, ilceAdi
FROM Ilce
) AS foo
WHERE rownumber = 5
If you want to learn about Microsoft technologies you can use E-Book Gallery for Microsoft Technologies 🙂
I hope that is helpful
May the knowledge be with you
M.Zeki Osmancık
Merhaba arkadaşlar
Bir önce ki makalede sizlere LinqToSql ile nasıl Select sorguları çalıştırabileceğiniz ile ilgili bazı bilgiler vermiştim. Bu sefer ise Insert Update ve Delete işlemleri ile ilgili bazı bilgiler vermek istiyorum. Projemiz içersine dbml dosyasını eklediğimizi varsayarak devam etmek istiyorum. Daha önceki örnekteki form tasarımına ek olarak sadece 3 Button 2 Textbox ve Label nesnelerini ekleyip bu tasarım üzerinden devam edeceğim.
Insert
Insert işlemini gerçekleştirebilmek için Kaydet butonumuzun Click olayı içersine sadece şu kodları yazmamız yeterli olacaktır.
NorthwindDataContext db = new NorthwindDataContext();
Category eklenecek = new Category();
eklenecek.CategoryName = TextBox1.Text;
eklenecek.Description = TextBox2.Text;
db.Categories.InsertOnSubmit(eklenecek);
db.SubmitChanges();
Doldur();
Bu işlemde bir dataContext örneği oluşturduktan sonra Northwind üzerine insert işlemi için gerekli olan alanları belirttiğimiz Category tipindeki nesneyi doldurup bu nesneyi tüm bilgileri ile birlikte kaydetmesini söylüyoruz.
Güncelleme ve silme işlemlerinden önce ufak bir noktaya değinmek sanırım yerinde olacaktır. SQL sorgularında yaptığımız gibi bizim burada mutlaka bir ID vermemiz gerekiyor yani güncellemek istediğimiz verinin kesin adresini yolunu belirtmeliyiz. Biliyorsunuz ki SQL kodları ile Update veya Delete komutları yazdığınızda “Where” ile ID sini belirtmezseniz tüm kayıtlar için güncelleme veya silme işlemini gerçekleştirir. Bu yüzden önce nasıl ID belirtiriz ona bakalım. ID yazan yere 3 5 yazmayacağız tabi ki. DataGridView üzerinden bir veri seçip onu yerleştirdiğimiz Textbox ve Label lar üzerine yazdırdıktan sonra işlemlerimize devam edeceğiz.
Kayıt Seçme İşlemi
Bunun için DataGridView üzerine listelediğimiz kayıtlardan herhangi bir tanesine çift tıkladığımızda işin gerçekleşmesi için CellContentDoubleClick olayı işimizi görebilir ve içersine yazmamız gereken kodlar ise şunlar:
Bu adımdan sonra artık listelenen kayıtlar arasından birine çift tıkladığımızda tüm bilgileri text ve label nesnelerine yazılacak bizde güncelleme veya silme yaparken bu bilgilerden yararlanabiliriz.
NorthwindDataContext db = new NorthwindDataContext();
Category secilecek = db.Categories.FirstOrDefault(x => x.CategoryID ==
Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString()));
lblID.Text = secilecek.CategoryID;
txtName.Text = secilecek.CategoryName;
txtDesc.Text = secilecek.Description;
Update
Güncelle butonumuzun Click olayına ise şu kodları eklememiz yeterli :
NorthwindDataContext db = new NorthwindDataContext();
Category guncellenen = db.Categories.FirstOrDefault(x=>x.CategoryID ==Convert.ToInt32(lblID.Text));
guncellenen.CategoryName = txtName.Text;
guncellenen.Description = txtDesc.Text;
db.SubmitChanges();
Doldur();
Burada daha önce seçip bir label üzerine yazdırdığımız ID yi kullanarak TextBox lar üzerindeki güncel verileri alıp update işlemini gerçekleştiriyoruz.
Aynı şekilde delete işlemi içinde yazmamız gereken kodlar çok basit şöyle ki :
NorthwindDataContext db = new NorthwindDataContext();
Category silinen = db.Categories.FirstOrDefault(x => x.CategoryID == int.Parse(lblID.Text));
db.Categories.DeleteOnSubmit(silinen);
db.SubmitChanges();
Doldur();
Birde burada her işlemden sonra kullandığımız datagridview içersine bilgileri dolduran Doldur metodu var onuda sizlerle paylaşayım.
db = new NorthwindDataContext();
var sonuc = from x in db.Categories
select new
{
x.CategoryID,
x.CategoryName,
x.Description
};
dataGridView1.DataSource = sonuc;
Bu kodları butonlarımızın Click olaylarına yazdıktan sonra herhangi bir hataya karşı önlem almadığımız için işlem sıramız şöyle olmalı öncelikle form açılacak ve kayıtlarımız sıralanacak , ardından bir kayıt eklemek için textboxlar doldurularak Kaydet butonuna basılacak ve Doldur metodu ile kayıtlar yeniden datagridview üzerinde görüntülenecek ardından bir kayda çift tıklayarak bilgilerini text ve label üzerine yazdıracağız ve Güncelle butonu ile güncelleme ve Sil butonu ile seçilen kaydın silinme işlemlerini gerçekleştireceğiz.
Umarım yararlı olur
Bilgiyle Kalın
M.Zeki Osmancık
Merhaba arkadaşlar bu yazımızda sizlere LinqToSQL nesnesini en basit şekilde nasıl kullanırız bunu göstermek istiyorum. Öncelikle LinqToSQL nesnesini kullanabilmek için ilk yapmamız gereken şey projemiz içersine bu nesneyi eklemektir.
Bu nesneyi eklediğimizde ve Server Explorer üzerinde ekliyeceğimiz bir veritabanı varsa buradan tabloları sürükleyip bıraktığımızda kendisi otomatik olarak bu tablolar ile alakalı bazı class ları oluşturur bize sadece kullanmak kalır 😉
Bu işlemi tamamladıktan sonra geldi sıra kod yazma işlemine acaba bu LinqToSQL den nasıl veri çekip form üzerindeki nesnelerde gösterebiliriz.
Select sorgusu nasıl yapılır ?
Select işlemini farklı şekillerde yapabilirsiniz bunun bir kaç farklı yolu mevcut. Hepsinde aynı sonucu alırız yani “SELECT * FROM CATEGORIES ” sorgusunun sonucunu alırız 😉
NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categoriesselect x;dataGridView1.DataSource = sonuc; |
NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()select x;dataGridView1.DataSource = sonuc; |
NorthwindDataContext db = new NorthwindDataContext();dataGridView1.DataSource = db.GetTable<Category>(); |
Select sorgusuna Where kriteri ekleme işlemi ?
Select sorgusune Where kriterini eklemek için yani “SELECT * FROM CATEGORIES WHERE CATEGORYID = 1” sorgusunun LinqToSQL de yazılması işlemide şu şekillerde olabilir.
NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryID ==1select x;dataGridView1.DataSource = sonuc; |
NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)select x;dataGridView1.DataSource = sonuc; |
Gelen sorguyu listeleme işlemi yani Order By anahtar kelimesinin yaptığı işi nasıl yapacağız şimdi kısa bir kodla bunu görelim 😉
NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)orderby x.CategoryID ascendingselect x;dataGridView1.DataSource = sonuc; |
NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryName.StartsWith(“B”)orderby x.CategoryID descendingselect x;dataGridView1.DataSource = sonuc; |
Bu kodlar sadece select için kullanabileceğimiz basit kodlar. Bir sonraki yazıda Inner Join, Left, Right Join gibi yapıların nasıl kullanılabileceğine bakacağız.
Umarım Yararlı Olur
Bilgiyle Kalın.
M.Zeki Osmancık
Merhaba arkadaşlar
Fazla zamanım olmadığı için blogla fazla ilgilenemiyorum işte o nadir bulduğum zamanlardan birtanesinde daha yararlı olacağını umduğum bir konu ile sizlerleyim. (TV programı gibi oldu ama idare edin artık :D) .
Bugün sizlere parmaklarımın yazabildiği kadar trigger anlatmak istiyorum.
Trigger Nedir? Önce bu soruya çok basit bir bakış açısı ile bakalım yani trigger in türkçe meali ile. Ne dersiniz ? Evet dediğinizi duyar gibiyim adeta 😀 Trigger tetik demektir. Nasıl yani tetik bildiğimiz silahlardaki tetikten işte 😉 Tetik çekildiğinde nasıl silah bir takım işlemler gerçekleşiyor ve kurşun atıyor . Sql dede bazı işlemlerden sonra otomatik olarak başka işlemlerin yapılmasını yani tetiklenmesini isteyebiliriz böyle bir yapıyı Trigger dediğimiz kod parçaları gerçekleştirirler…
Peki Trigger dediğimiz olay nasıl yazılır yada yapılır???
Triggerlar, Query ekranında T-SQL kodu ile veya Management Studio ile oluşturulup yönetilebilirler ve View ve tablolar üzerinde tanımlanabilir. CREATE TRIGGER komutunu kullanabilmek için sysadmin, db_owner veya db_ddladmin rolüne sahip olmak gerekir. Bir trigger başka bir tabloya erişecekse bu tablo için de trigger oluşturan kullanıcının erişim izni veya güncelleme izni olması gerekir.
Peki trigger ‘ ları ne zaman kullanırız ?
* Değişiklikleri takip etmek için,
* Birincil anahtar üretmek için,
* Karmaşık iş kurallarını gerçekleştirmek için,
* E-posta atmak gibi olayları otomatik olarak yapmak için,
* Standart hata mesajlarının dışında bir hata mesajı elde etmek için,
* Veritabanı erişimlerini takip edebilmek için,
* Nesnede meydana gelebilecek değişiklikleri takip ve engellemek için kullanabiliriz.
Trigger dediğimiz yapı kendi içinde 2 ye tekrar o bölünenlerden biride ikiye ayrılır 😀 çokmu karışık oldu ? 😀 yani özetle şöyle :
DDL Trigger’lar: Create, Alter ve Drop işlemleri gerçekleştiğinde çalışan trigger’lardır.
DML Trigger’lar: Insert, Update ve Delete işlemleri gerçekleştiğinde çalışan trigger’lardır.
CREATE TRIGGER tetikleyici_adiON tablo_adiFOR veya AFTER veya INSTEAD OF (INSERT veya UPDATE veya DELETE)AS Sql ifadeleri |
After (For) Trigger’ı: After triggerları, kendiyle ilişkili işlem gerçekleştikten hemen sonra ateşlenir.
Veritabanındaki temel işlemler için (ekleme, silme ve güncelleme) After triggerları tanımlanabilir.
Create Trigger Tg_SilinenKayıtlar
On Employees
After Delete
As
Begin
Declare @Ad nvarchar(50)
Declare @CalisanID İnt
Select @Ad=FirstName,@CalisanID=Employees From Deleted
Select CalisanID,Ad+’-Silinmiştir’,GetDate()From Deleted
Insert Into CalisanKayitRapor Values(@CalisanID,@Ad+’- Silindi’,GetDate())
End
Instead Of Trigger’ı: Instead of triggerları, belirlenen işlem gerçekleşirken devreye girer ve kendi içinde tanımlanan komutları icra etmeye başlar. Yani, belirlenen işlemin yerine geçer. Instead of triggerlari işlemlerin arasına girebildiğinden kontrol amaçlı kullanılabilirler. Tıpkı After triggerları gibi temel veritabanı işlemleri için Instead Of triggerları tanımlanabilir.
Alter Trigger Tg_CalisanKayitRaporOn EmployeesAfter InsertASBegin
Declare @Ad Nvarchar(50) Declare @CalisanID int Select @Ad = FirstName,@CalisanID = EmployeeID From Inserted
Insert Into CalisanKayitRapor Values(@CalisanID,@Ad,GetDate()) End |
INSERT – UPDATE – DELETE
Trigger devreye girdikten sonra Inserted veya Deleted tablolarında yeni eklenen veya silinen kayıtların bir kopyası tutulur.
Trigger Update (ALTER)
CREATE ile oluşturulmuş bir tetikleyiciyi daha sonra üzerinde değişiklikler
yapmak üzere tekrar açmak isteyebilirsiniz. Bunun için, tablonuzda oluşturulmuş bir tetikleyici üzerindeyken sağ tıklayarak açılan menüden Modify komutunu vermeniz gerekir.
Trigger Silmek (DROP)
Oluşturulan bir tetikleyiciyi DROP komutuyla ya da tetikleyici üzerinde sağ tıklayarak açılan menüden Delete komutunu vererek silebilirsiniz.
Delete Trigger Tg_CalisanKayitRapor |
Trigger Enable ya da Disable
Oluşturulan bir tetikleyici, her zaman aktif durumdadır. Tetikleyiciyle ilgili bir durum oluştuğunda otomatik olarak devreye girer. İstenildiğinde oluşturulan bu tetikleyiciler pasif
hâle getirilebilir. Tetikleyici üzerinde sağ tıklayarak açılan menüde Disable komutunu verdiğinizde tetikleyici pasif hâle gelir.
ALTER TABLE tablo_adiDISABLE TRIGGER Musteri_SilmeveyaENABLED TRIGGER Musteri_Silme |
Umarım yararlı olur…
M.Zeki Osmancık.
Merhaba arkadaşlar bu yazımda başıma gelen ve çözümünü biraz zaman harcayarak bulabildiğim bir bilgiyi sizlerinde vakit kaybetmemeniz için paylaşmak istiyorum.
Öncelikle Wamp server neden SQL server ve visual studio olan bir bilgisayarsa çalışmaz bunu cevaplayalım. Sebebi hepsinin aynı portu dinlemeleridir. SQL server Integration service ve IIS bu portu dinlediği için wamp server hizmet veremez.
Bu sorunu aşabilmek için olaya en başından bir bakalım.
Öncelikle kurulum nasıl oluyor ona bakalımn çoğu yerde var ama ben yinede fazla bilgi göz çıkartmaz diyerek başlıyoruz kurmaya…
Kurulurken bizden default bir web browser exe sini belirtmemiz gerekiyor. Eğer Firefox varsa size bu tarayıcıyı varsayılan olarka ayarlamak isteyip istemediğinizi soracak karar sizin artık…
Kurulum biterken localhost ve domain ismi sorar bunlar orada yazdığı gibi kalabilir. Tabi buda size kalmış bir durum isterseniz değiştirebilirsinizde.
Ve kurulum tamamlandığında sağ altta bu programın çalıştığını fakat turuncu bir renkte yani offline durumda olduğunu görüyoruz. Bunun sebebi Sql server içersindeki bazı servislerin ve IIS servislerinin dinledikleri portlarla aynı portları kullanmaya çalıştığından online olamıyor. Peki ne yapmak lazım 😀
Bunun için wamp klasörü içersinde yani tam olarak C:\wamp\bin\apache\Apache2.2.17\conf adresinde httpd.conf dosyasını notepad ile açıyoruz .
Ardından bu dosya içersinde “Listen 80” yazan satırı bularak 80 rakamını herhangi bir rakam yapabilirsiniz. Mesela ben 88 yaptım.
Bu işlemden sonra notepad i kaydedip kapatıyoruz ve ayarların geçerli olabilmesi için wamp server üzerinde Restart All Services seçeneğini seçerek yeniden başlamasını sağlıyoruz.
Sonunda WAMP Server kullanıma hazır .
Tek bir ayrıntı var çalıştırma işlemi içersinde sadece port numarasını belirtmemiz gerekiyor Örneğin:
http://localhost:88/phpmyadmin/
Umarım yararlı olur.
M.Zeki Osmancık…
Merhaba arkadaşlar bu yazımızda Sql içersinde bulunan ve hayat kurtaran Stored Procedure konusuna değineceğiz.
Bir amaca ulaşmak için takip edilen yol ve yöntem tanımından yola çıkılarak, bir prosedür herhangi bir işlevi yerine getirebilmek için yazılan kodların bir paket içersinde tutulmuş halidir diyebiliriz.
Stored procedure kullanmanın bize sağladığı yararlardan kısaca bahsetmek gerekirse :
• Çalışırken bazı planlamaların doğru olarak yapılmasını sağlar ve tekrar tekrar kullanılabilir bir yapıdır.
• İçersine yazılan sorgulara parametrelendirme özelliği katar.
• Uygulamalar arasında kullanılabilir.
• Güvenli data giriş çıkış ve düzenlemesi sağlar.
• Daha az network bandwidth kaynak kullanımı sağlar.
• Job olarak tanımlanabilir ve schedule edilebilir.
• Database objelerine daha güvenli erişim olanağı tanır.
Stored procedure bileşenleri parçalara ayırır yani parsing işlemi gerçekleştirir.
Yani ilk olarak ; Veritabanı içersinde view table vb. nesnelere gönderme yapan referanslar varsa geçerli olup olmadıklarını (nesnenin ve iznin olup olmadığı) kontrol eder.Kontrollerden geçen SP nin adı sysobject tablosuna kodları ise syscomments tablosuna kaydedilir.
Bu işlemlerle birlikte derleme işlemi yapılır. Normalizasyon işlemleri olarak da anılan bu işlemler sonucunda, ağaç şeması elde edilir. Bu şema da sysprocedures tablosunda saklanır.
Stored Procedure herhangi bir anda çağrıldığında, ilk kez çalışıyorsa bu işlemler gerçekleştirilir. İlk defa çağrılmıyorsa, kontrol, sorgulama ağacı oluşturma işlemleri yapılmaz ve oldukça hızlı bir şekilde Stored Procedure’ün derlenmiş haliçalışır. Bundan dolayı Stored Procedure’ler derlenen nesnelerden biri olarak bilinir.
Stored Procedure Oluşturmak
CREATE PROC [ EDURE ] prosedür_adıAST-SQL ifadeleri |
Değişiklik Yapmak
ALTER PROC [EDURE] prosedür_adıAST-SQL ifadeleri |
Bir Stored Procedure’de değişiklik yapabilmek için önce kaynak kodunun alınması ve bir Query ekranına kopyalanıp düzenlenmesi gerekir.
Stored Procedure’ü Silmek
DROP PROC sahip.prosedür_adı |
Var olan bir Stored Procedure’ü silmek için DROP komutunu kullanmak gereklidir.
DROP komutundan sonra Stored Procedure’ün sahibinin adı ve Stored Procedure’ün adı yazılmalıdır.
Değer Alan Stored Procedure’ler
Stored Procedure’lerin daha etkin kullanılabilmesi ve işlevsel bir hale gelebilmesi için dışarıdan değer almalarına ihtiyaç duyulur. Bu nedenle girdi parametreleri (Input Parameter) kullanılır.
Değer Alıp-Veren Stored Procedure’ler
Değer alıp-veren stored procedure ler, query’den gönderilen değerleri alıp istenilen işleme tabi tuttuktan sonra elde edilen sonucu tekrar Query’e gönderen prosedürlerdir. Buişlem için OUTPUT parametresi kullanılır.
RETURN Deyimi
Prosedürden tek bir tamsayı değer döndürmek için bir başka seçenek olarak RETURN ifadesi kullanılabilir. Bu şekilde OUTPUT parametresini hem prosedür içinde hem de prosedürün çağrıldığı yerde tanımlamak zorunda kalınmadan doğrudan değer döndürülebilir.
Store Procedureler kısaca bu kadar…
Umarım yararlı olur.
Tekrar görüşmek üzere…
M.Zeki Osmancık
Merhaba arkadaşlar bu yazımızda veritabanı ile alakalı bazı terimleri sizlere açıklamaya çalışacağım.
VeriTabanı (Database):Verilerin fiziksel hafızada saklandığı datafiles ve bu verilerin olaylarının loglandığı log dosyalarından oluşan en az 2 dosyadan oluşan yapıları SQL Server VeriTabanı (Database) olarak değerlendirir.
Schema (Şema):Bir veritabanı içersinde yaratılan farklı schemalar içersinde aynı isimde tablolar ,store procedureler gibi farklı nesneler yaratabilmek mümkün oluyor böylelikle database içersindeki nesneleri gruplara ayırarak çalışmayı kolaylaştırabiliyoruz.
Table (Tablo) :Günlük hayatta kullandığımız liste mantığı ile oluşturduğumuz nesnelerdir.Yani bir sınıf listesinden tutun alışveriş listesine kadar tüm listeleri tablo olarak tanımlayabiliriz. Teknik olarak bakarsakta satır ve sütunlardan oluşan veri saklayabilen veritabanının en temel nesnesi diyebiliriz.
ResultSet (Sonuç Kümesi): Bir seçme ve listeleme işlemi gerçekleştiğinde bazen bir bazen birden fazla tablo kullanılarak hazırlanan ve veritabanı üzerinde mevcut olmayan tabloların hepsi birer sonuç kümesidir.
Row (Satır): Tablo üzerinde mevcut olan her bir kayıt bir satıra denk gelir.
Column(Sütun): Tablolarda dikey sütunların yanyana gelmesi ile meydana gelmiştir. Bir ürün tablosunu ele alacak olursan her ürün bir satır bu ürünün her bir bilgiside sütundur.
Field (Alan): Yapılandırılmış bilginin her bir kısmını saklamak üzere yapılan tanımlamadır. Bu alanın uzunluğu ne kadar olacak harf ise ne kadar harf alabilir, rakam ise kaç basamaklı olacak bu türden soruları yanıtlamak için bir alan tanımlamak ve bu alanada bir veri tipi belirtmemiz gerekir.
Data Type (Veri Tipi): Bilgisayar kayırları yapısal olarak tutarken onların yapıları hakkında fikir sahibi olabilmek için bazı özellikleri önceden tanımlanması gerekir. İşte bu özellikleri belirten tipler veri tipleridir.
Record (Kayıt) : Yapılandırılmış verilerden her birine bir kayıt denir. Yani alan bilgileri ile birlikte her bir satır kayıttır.
Constrait (Kısıtlayıcı) : Herhangi bir alan içersine girilebilecek bilgileri zorlayıcı kurallara denir. Birincil Anahtar Kısıtlayıcı , Tekill Kısıtlayıcı , Default Kısıtlayıcı, Yabancı Anahtar Kısıtlayıcı, Kontrol Kısıtlayıcı olmak üzere 5 tür kısıtlayıcı vardır.
Default : Tabloda bir alana değer girilmediğinde bu alan için standart olarak önceden bizim belirttiğimiz bir veri veya verinin ilk giriş işlemi esnasında otomatik olarak bu sütuna atanması.
Rule (Kural):Bir alana girilebilecek verilerin bir kurala bağlı olmak üzere girilmeye zorlanması için yapılan tanımlamalara denir.
Indexes (İndeksler) : Bir kaç yüz kayıttan oluşan bir tablo üstüne kayıt arama işlemi veritabanı yönetim sistemi için oldukça basit bir işlemdir ancak bu sayı milyonlara çıktığında çeşitli kriterlere bağlı olarak organize edip sıralayacak bu sayede hızlı erişimi sağlayacak yapılar vardır. Veriler fiziksel olarak düzenleniyorsa CLUSTERED INDEX (Kümelenmiş), fiziksel olarak düzenlenmiyorsa UNCLUSTERED INDEX(Kümelenmemiş) adını alır.
View : Bazen hazırlanan sorguların veya elde edilen sonuç kümelerinin bir tablo gibi davranması istendiğinde View kullanılarak bu sanal tablo oluşturulur.
Synonim : View den farklı olarak tablolar dışındaki store procedureler gibi nesnelerede takma adlar verebilmemizi sağlar.
Stored Procedure (Kaydedilmiş Yordamlar) : SQL kodları çalıştırılmadan önce veritabanı yönetim sistemi tarafından yorumlanır ve derlenir ardından çalıştırılmak istenen kod çalışır ve sonuç kümesi elde edilir. Bu işlem sırasındaki yorumlama ve derleme kısmı veritabanı yönetim sistemine ek bir yük getirir. Bunu hızlandırabilmek için derlenmiş ve yorumlanmış ifadeleri kullanabiliriz. Bu derlenmiş ifadeler Stored Procedurelerdir. Genellikle veri erişim katmanı olarak kodlanırlar.
Cursor (İmleç) : Veritabanında bulunan kayıtlara satır satır erişmek istediğimizde bu işi bizim yerimize imleçler halleder. İmleçler genellikle veritabanı üzerindeki verilere baım yapılırken kullanılırlar.
Trigger (Tetikleyici) : Triggerler veritabanı üzerindeki veriler ile ilgili ekleme, silme , düzenleme gibi işlemler yerine veya bu işlemlerden sonra otomatik olarak yapılacak olan işlemlerin belirtildiği yapılardır. Veri bütünlüğünü sağlamak amacıyla kullanılırlar.
UDF User Defined Functions (Kullanıcı Tanımlı Fonksiyonlar) : UDF ler genellikle karmaşık işlemlerin tek bir sefer fonksiyon olarak kaydedilip daha sonra sadece isimleri ile çağrılabilen bir yapıdır. Stored Procedure lerden tek farkı select sorguları içersinde onların bir parçası gibi kullanılabilmeleridir.
User Defined Types (Kullanıcı Tanımlı Tipler): SQL server 2005 den itibaren 8K yi aşmamak için kendi gereksinimlerimizi giderebilmek için oluşturduğumuz kendine özgü metotlarıda içersinde bulundurabilen tiplerdir.
Umarım yararlı olur
Sonraki yazılarda görüşmek üzere …
M.Zeki Osmancık
Merhaba Arkadaşlar . Bu yazımızda TSQL den bahsetmek istiyorum. Veritabanı programları ile uğraşanların yada biz programcıların sürekli kullandığı hatta bazen baş belası olabilen bu SQL neymiş ona bakalım.
SQL (Structured Query Language) yani Yapılandırılmış Sorgulama Dili anlamına gelen veritabanı sorgulama dilidir. SQL, düzeltilmesi veya değiştirilmesi istenen bilgileri açıkça belirtmeye izin veren ve yerine getirilebilecek başlıca işlemleri tanımlamamızı sağlayan bir komut takımıdır
Sql deki kodları :
Veri İşleme Dili – DML (Data Manipulation Language )
Veri Tanımlama Dili – DDL (Data Definition Language)
Veri Kontrol Dili – DCL(Data Control Language)
Olarak gruplayabiliriz.
Bu gruplar içersinde hangi kodlar var peki?
Veri İşleme Dili – DML (Data Manipulation Language )
SQL Veri İşleme Dili veri girmek, değiştirmek, silmek ve verileri almak için kullanılan DML komutlarının tümüdür.
SELECT : Veri seçmek
DELETE : Veri silmek
UPDATE : Veri güncellemek
INSERT : Veri girmek
Veri Tanımlama Dili – DDL (Data Definition Language)
SQL Veri Tanımlama Dili verilerin tutulduğu nesneler olan tabloların yaratılmasını, silinmesini ve bazı temel özelliklerinin düzenlenmesini sağlar.
CREATE TABLE : Yeni bir tablo yaratmak
ALTER TABLE : Tabloda değişiklik yapmak
DROP TABLE : Tabloyu silemek
CREATE INDEX : Tabloda dizin oluşturmak
Veri Kontrol Dili – DCL(Data Control Language)
SQL Veri Kontrol Dili bir veritabanı kullanıcısı veya rolü ile ilgili izinlerin düzenlenmesini sağlar.
GRANT :Kullanıcıya yetki vermek
DENY:Kullanıcı, grup veya rolü herhangi bir eylem için engeller.
REVOKE:Daha atanmış olan yetki veya engeli kaldırır.
Veritabanında Arama İşlemleri
Bir veritabanı içersindeki bilgilerimiz arasında belli kriterlere uygun yada bir rapor şeklinde bir arama gerçekleştirmek istiyorsak kullanmamız gereken kod Select olmalıdır.
Select ifadesi bir tablodan verileri seçmek için kullanılır. Elde edilen veriler sonuç kümesi olarak adlandırılır ve yine bir tablo görüntüsü şeklinde görüntülenir.
Söz dizimi:
Tüm alanları görüntülemek istemediğimiz zamanlarda kolon adı belirterek istenilen bilgiler çekilebilir.
SELECT <görüntülenmek istenen kolonlar> FROM <tablo adı>
Tüm alanları göstermek istediğimiz durumlarda kolon adı yerine * kullanılır.
SELECT * FROM <tablo adı>
Şimdi birlikte bir örnek yapalım. Northwind veritabanı içersinde bulunan herhangi bir tablonun bilgilerini önce tablo ismi ile sonra * ile çağıralım.
Verilerimizi tablo ismi ile yada * simgesiyle hepsini getiriyoruz. Süper ama bir sorun var yada sorundan çok bir eksik demeliyiz belkide belli kriterlere uyan bilgileri getirmek istediğimde ne yapmam gerekir ?
Böyle bir durumdada yardımımıza WHERE yantümcesi koşuyor. WHERE yantümcesi görüntülemek istediğimiz verileri belirli bir kritere göre seçebilmemizi sağlar.
Yazımı
SELECT <sütun adı> FROM <tablo adı> WHERE <koşul(lar)>
Yani WHERE yantümcesi diyor ki bana istediğin kriteri söyle NERDE eşleşen varsa alayını getireyim sana diyor. Ama bu kriterleri hangi operatörlerle sağlarız birde onu belirtelimki sadece eşittir işaretinden ibaret olduğu anlaşılmasın.
İşte WHERE yantümcesi ile kullanabileceğimiz operatörler
Bizde teşekür edip bir örnek yaparak Where yantümcesi istediğini veriyoruz.
Bu kez müşteriler tablosundayız ve Madrid deki müşterilerimizi görmek istiyoruz.
Nasıl Where yantümcesi işini iyi yapıyor değilmi 😀
WHERE yantümcesinin operatörlerinden bahsetmiştik orada herşey güzel anlaşılır matematiksel şeyler var ama 2 operatör varki kafa karıştırabilir. LIKE ve BETWEEN bunlarında nasıl kullanıldığına kısaca deyinelim
LIKE
LIKE kelimesi sütundaki değerlerin, joker karakterler kullanılarak oluşturduğumuz bir arama koşulu ile karşılaştırılmasını sağlar.
SELECT <kolon adı> FROM <tablo adı>
WHERE <aranacak sütun> LIKE <kriter>
Örnek arama koşulları:
LIKE ‘BR%’ İlk iki harfi BR olan tüm kayıtlar
LIKE ‘Br%’ İlk iki harfi Br olan tüm kayıtlar
LIKE ‘%een’ Son üç harfi een olan tüm kayıtlar
LIKE ‘%en%’ İçerisinde en ifadesi geçen tüm kayıtlar
LIKE ‘_en’ Son iki harfi en olan üç harften oluşan tüm kayıtlar
LIKE ‘[CK]%’ C veya K harfleriyle başlayan tüm kayıtlar
LIKE ‘[S-V]ing ing ile biten ve ilk harfi S ile V harfleri arasında olan dört harfli herhangi kelime
LIKE ‘M[^c]%’ M ile başlayan ikinci harfi c olmayan tüm kayıtlar
BETWEEN..AND
BETWEEN … AND operatörü 2 değer ile belirtilen aralığı sınar. Bu değerler sayı, metin veya tarih olabilir.
SELECT <kolon adı> FROM <tablo adı>
WHERE <sütun adı> BETWEEN <değer 1> AND <değer 2>
Umarım faydalı olmuştur bir başka yazıda görüşmek dileği ile ….
M.Zeki Osmancık
Bir önceki yazımızda View nasıl yazılır ne işe yarar bunu öğrenmiştik . Bu yazımızda ise View içersinde yapabileceğimiz bir takım işlemleri öğreneceğiz.
Oluşturduğumuz View yapısı üzerinde değişiklik yapabilmek için Alter View; Silebilmek için Drop View cümlelerini kullanıyoruz.
Encryption:
Encryption cümlesi şifreleme anlamına gelir. Türkçe anlamınında belirttiği gibi view in kod içeriğini yani view i oluşturduğumuz kodları görüntülenemez şekilde şifrelememizi sağlar. Bu işlemi geri almak istersek maalesef ki başarısız oluyoruz çünkü Decryption gibi bir çözüm yok. Encryption kullanılması gerekiyorsa mutlaka View in kaynak kodlarının başka bir kaynağa yedeklenmesi şiddetle tavsiye edilir.
With Encryption Yapısı
Create View viewAdiWith EncryptionAS
Select Sorgusu |
Örnek olarak yukardaki gibi bir View oluşturduğumuzda veritabanındaki Views klasörü içersinden bu yarattığımız View i bulduğumuzda üzerinde bir kilit simgesinin olduğunu göreceğiz ve sağ tık ile düzenlemeye çalıştığımızda başarısız olacağız. Encryption ile kodlarımızı emniyet almış olduk. Daha öncede belirttiğim gibi bunu tekrar geri döndürecek kilidi çözecek bir kod yok.
Oluşturulan view ların içeriklerini görüntülemek için kullandığımız bir stored procedure var. Sp_helptext . bu SP bize belirttiğimiz View içeriğini gösterir. Öncelikle nasıl kullanıldığına bakalım sonra Encrypt ettiğimiz View i görüntüleyebilirmiyiz ona bakalım.
Görüldüğü gibi normal bir view içeriğini görüntüledik. Şimdide Encrypt edilmiş view a bakalım 😉
Schemabinding
Encryption kadar olmasada Schemabinding kelimesinin tercümesi zaten bu kodu hangi amaçlar için kullanabileceğimizi anlamaya yeterli oluyor. Eğer oluşturulacak View içersinde Schemabinding kullanılıyorsa View içersinde kullandığımız tabloların sütunlarını kilitlemiş oluruz. View içersinde Schemabinding kullanırken hatırlamamız gereken bazı kurallar var.
Öncelikli kural Schemabinding kullanacağımız View içersindeki sorgularımızda * işaretini kullanmamak bunun yerine tüm görüntülemek istediğimiz sütunları tek tek yazmamız gerekiyor. Yazmazsak aşağıdaki gibi bir hata ile karşılaşacağız.
Ayrıca belirteceğimiz tablo isimlerini tabloismi.sütunismi olarak belirtmemiz gerekiyor. Son olarakda tablo ismi ile alakalı olan kuralımız var , tablo isminde ise dbo.tabloismi yazmamız gerekiyor ki tam olarak tabloyu ve sütunlarının yerini garantilemiş olalım.
Yukarıdaki örnekte View’de görüntüleyeceğimiz verilerin bulunduğu tablo ya da tablolardaki sütunların yapısında yapılacak herhangi bir değişikliği bu View’i silmedikçe ya da Schemabinding özelliğini View’imizden kaldırmadıkça yapamayacağız. Oldu da böyle bir işlemi Schemabinding özelliği varken yapmaya kalkıştık, SQL bize bu işlemin yapılamayacağını belirten bir hata mesajı verecektir. UrunleriListele isimli View için kullandığımız dbo.Products tablosundan ProductName sütununu kaldırmaya çalışalım.
WithCheckOption
Son olarakda sizlere View lerin WithcheckOption özelliğinden bahsetmek istiyorum. Biliyorsunuz ki View ler içersinde tek bir tablo ile işlem yaptığımızda Insert,Update, Delete gibi işlemleri yapabiliyoruz. İşte bu işlemleri yapabildiğimiz view ler içersinde bazı kısıtlama yapabilmek için WithCheckOption özelliğini kullanırız. Yeni bir view ile bu özelliği inceleyelim.
Bu şekilde tek tablo üzerinde ve Where kelimesi ile kriter belirtilerek oluşturduğumuz View üzerine insert işlemi yapmaya kalktığımızda hata ile karşılaşıyoruz.
Umarım yararlı olmuştur sonraki yazılarda görüşmek üzere.
Merhaba arkadaşlar bu yazımızda MSSQL de bulunan View yapısından bahsetmek istiyorum. Bu yazının sonunda View yapısını nasıl yazıldığını ne işe yaradığını öğrenmiş olacaksınız.
View yapılarını bilinenin aksine sadece ihtiyacımız olduğunda kullanmamız işimizi kolaylaştıracağı gibi bizi gereksiz yüktende kurtaracaktır. Yerinde kullanıldığında veritabanında çok daha verimli çalışmalar yapmamızı sağlarlar.
Peki nedir bu view ? View’ler bir veya birden fazla tablonun istenilen verilerinin bir arada sunulmasını sağlayan tanımlanmış sorgulardır. View leri sanal tablolar olarakda nitelendirebiliriz. Aynı oluşturduğumuz tablolar gibi satır ve sütunlara sahiptir. Birden fazla sütunun birleşerek tek bir komut altında topladığımızı düşünebiliriz. Hatta sadece tek bir tablo ile ilgili bir view oluşturduğumuzda İnsert Update Delete gibi işlemlerinide gerçekleştirebiliriz. View ler için sanal kelimesini kullanıyoruz çünkü üzerinde veri tutmazlar , sadece istenen veriye ulaşılması için bir araçtır aslında. Bir view yazdığımızda ne oluyor acaba ? Bize neler kazandırıyor bir göz atalım.
*İlk olarak birden fazla tablo ile çalışırken gereksiz karmaşadan kurtuluyoruz. Yani ne demek bu ? Biz uzun bir SQL sorgusu yazdığımızda her seferinde bu uzun ve karmaşık kodla uğraşmak yerine bir view işimizi görüyor.
*Bir diğer artısı ise veri ulaşım performansını arttırmak.
*Veri erişimini sınırlamak ve kontrol altında tutmak
View oluştururken dikkat etmemiz gereken hususlar:
Oluşturulan View de;
-Compute ya da Compute By cümleciği,
-Into anahtar sözcüğü,
-Option cümleciği
kullanılamaz.
-View’ler temporary tablo dediğimiz geçici olarak oluşturulan tablolara referans verilemez. Bu tablolardan veri istenemez.
-Order By cümleciği sadece TOP operatörü ile birlikte kullanıldığında kullanılabilir.
-Bir View farklı tablolardan gelen aynı isimlere sahip farklı sütunları içerebilir.
-View’lerdeki sütunlar aritmetik ifadelere sahip olabilir
-Bir view oluşturabilmek için database üzerinde sysadmin (system administrator), db_owner (database owner), db_ddladmin (data definition language administrator) yetkilerine sahip olmalıyız.
Northwind veritabanını kullanarak örneklerimizi verelim ve bir view nasıl yazılıyor nasıl kullanılıyor görelim 😉
Syntax olarak
CREATE VIEW [View_Ismi]ASSQL Kodları. |
Haydi sizle önce çok basit bir Select sorgusu sonra karışık bir select sorgusu ile örnek verelim.
Birde karmaşık olana bakalım.
Bu kadar uzun bir kodla ( hatta bundan daha uzunda olabilirdi belki ) her seferinde uğraşmak insanı yorabilir karışıklığa ve hatalara olanak sağlar işte bu karışıklık ve hatalara meydan vermemek için View kullanmalıyız diyoruz.
Kodlarla çok güzel yazdık bu View i peki hiç bilgimiz yoksa kod bilmiyorsak olamazmı ? O zaman ne yapacağız bu View denen zıkkımı yaratmak için çok basit :
Öncelikle Object explorer penceresinde database imiz içersinde bulunan klasörlerden Views klasörüne sağ tık yapıyoruz ve New View diyoruz.
Ardından bizden hangi tablolarla alakalı çalışma yapmak istediğimizi soruyor bizde istediğimiz tabloları seçiyoruz.
Seçtikten sonra zaten biraz önce uzun uzun yazdığımız kodları bizlere otomatik olarak yazılmış halinin canlı halini getiriyor ekrana tek yapmamız gereken kaydetmek 😀
Basit olarak bir view oluşturma işlemi bu kadar arkadaşlar bir başka makalemizdede bu View in içindekine , dibindekine , altında yatan koca ayzberge (iceberg) bakacağız
Görüşmek üzere…
Merhaba arkadaşlar
Biliyorsunuzki insanoğlu sürekli bir saklama derdindedir. Değerli olanı saklamak tüm canlıların doğasında vardır. Ne saklarız mesela ? Para, önemli evrak ,ziynet eşyası vb. Hatta yaşam için önemli ve değerli olan yiyeceklerimizi bile buzdolaplarında belli bir düzenle saklarız değil mi ? Değerlimissss dediğimiz herşeyi gelebilecek tehlikelerden korumak için saklarız.
Teknoloji geliştikçe değerli şeylerde teknolojik olmaya başladı haliyle artık küçük bir veri ,bir hisse senedinden değerli olabiliyor günümüzde, o yüzden verilerimizide güvenli bir yerde muhafaza etmek isteriz. Bu arada veri ne diyecek olursakda: bilgisayarda işlenmemiş ham bilgilere veya bilgisayarın alabildiği işleyebildiği sonuç üretip saklayabildiği herşeydir.Dağınık bilgi kümesidir ve anlamlı bir şekilde düzenlendiğinde yararlı bilgi olur. Peki veriler bizim için para ziynet eşyası vs kadar önemliyse bu verileride güvenli bir yerde tutmalıyız. Bu yerin adıda VeriTabanı.
Peki veritabanı nedir ?
Veritabanı birbiri ile ilişkili veriler topluluğu, aynı zamanda veriyi yönetebilmek ve sunmak için kullanılan tablolar sorgular raporlardan oluşan nesneler topluluğudur. Sadece veriler yığını değildir ilişkileride inceleyip yorumlayabilirler. Bir başka deyişle bilgisayarda sistematik şekilde saklanmış programlarca işlenebilecek veri yığınıdır.
Ne avantajı var veritabanının dersek ilk olarak veri tekrarından kurtulucaz sonra bellek tasarufu sağladığı için bilgisayarımız çok yorulmayacak , standart bir sorgu dili vardır onunla tüm işlemlerimizi yapabiliyor olacağız ve en önemliside veri bütünlüğümüz bozulmayacak.
Dezavantajı yokmu tabiki var ilk olarak profesyonel bir kurulum gerektiriyor eğer doğru düzgün bir kurulum tasarım yapılmazsa sonradan işler bozulabilir tüm veriler kaybolabilir. Diğer dejavantaj ise klasik dosya biçimlerine göre birazcık maaliyetli .
Verileri sistematik olarak depolayan yazılımlara ise “Veri Tabanı Yönetim Sistemi” deniyor. Birçok yazılım bilgi depolayabilir ama aradaki fark, veri tabanın bu bilgiyi verimli bir şekilde düzenleyebilmesi ve ona hızla ulaşabilmesidir. Bilgiye gerekli olduğu zaman ulaşabilmek esastır. Bilgilerin bütünlük içerisinde tutulabildiği ilişkilerin incelenerek bir çok kriterle işlem gerçekleştirilen ve birden fazla kullanıcıya aynı anda bilgiye erişim imkânının sağlandığı programlardır.
Örneğin : MS-SQL Server, Oracle , Sybase, Acces,Postgre SQL
Veritabanı yazılımları yapı bakımından 2 ye ayrılırlar .
1- Düz Dosya Veritabanı oluşturan programlar.
Tüm verileri tek bir tabloya sığdıran ve kayıtta ortak olan herhangi bir bilginin her kayıtta tekrarlandığı veritabanı uygulamalarıdır.
Bu tür programlara en iyi örnek Notepad , MS Word , MS Excel
2- İlişkisel Veritabanı oluşturan programlar
Düz dosya veritabanı mantığının tam tersine bir çok farklı tablo kullanılan tablolar arasında ilişkiler bulunan bu ilişkileri düzenleyen yöneten sistemlerdir. Birden fazla tablo arasındaki geçişleride ilişkiler sayesinde daha hızlı erişim daha tasarruflu disk kullanımı sağlar ve güncelleme işlemi çok daha basit olur.
Veritabanı bileşenleri
Tablolar: Bir veritabanında verilerin saklandığı birimlerdir ve birden fazla olabilirler aralarındaki bağ ile tek bir tablonun yükü diğer tablolara dağıtılmış olur ve peformans sağlar.
Raporlar: Raporlama Servisleri çeşitli amaçlar için veritabanındaki bilgileri düzenli kurallı ve isteğe uygun olarak raporlayan ve uygulamalarımızda bir dizi işlevsellik sağlayan servislerdir.
Sorgular: Veritabanı sistemi içersinde yer alan tablolardaki verilerin ilgili kodlar yardımı ile isteğe uygun olarak seçilerek belirli bir düzen içersinde sunulması olayıdır .
Umarım veritabanları ile ilgili fikir sahibi olmuşsunuzdur.
Görüşmek üzere.