28 Haziran 2009 Pazar

Kullanışlı MSDOS Komutları

addusers - add or list users to/from a csv file
arp - address resolution protocol
assoc - change file extension associations
associat - one step file association
at - schedule a command to run at a later time
attrib - change file attributes more
browstat - get domain, browser and pdc info
cacls - change file permissions
call - call one batch program from another
cd - change directory - move to a specific folder
change - change terminal server session properties
chkdsk - check disk - check and repair disk problems
chkntfs - check the ntfs file system
choice - accept keyboard input to a batch file
cipher - encrypt or decrypt files/folders
cleanmgr - automated cleanup of temp files, recycle bin
clearmem - clear memory leaks
clip - copy stdin to the windows clipboard.
cls - clear the screen
cluster - windows clustering
cmd - start a new cmd shell
color - change colours of the cmd window
comp - compare the contents of two files or sets of files
compact - compress files or folders on an ntfs partition
compress - compress individual files on an ntfs partition
con2prt - connect or disconnect a printer
convert - convert a fat drive to ntfs.
copy - copy one or more files to another location
csvde - import or export active directory data
date - display or set the date
dcomcnfg - dcom configuration utility
defrag - defragment hard drive
del - delete one or more files
delprof - delete nt user profiles
deltree - delete a folder and all subfolders
devcon - device manager command line utility
dir - display a list of files and folders
diruse - display disk usage
diskcomp - compare the contents of two floppy disks
diskcopy - copy the contents of one floppy disk to another
dnsstat - dns statistics
doskey - edit command line, recall commands, and create macros
dsadd - add user (computer, group..) to active directory
dsquery - list items in active directory
dsmod - modify user (computer, group..) in active directory
echo - display message on screen
endlocal - end localisation of environment changes in a batch file
erase - delete one or more files
exit - quit the cmd shell
expand - uncompress files
extract - uncompress cab files
fc - compare two files
fdisk - disk format and partition
find - search for a text string in a file
findstr - search for strings in files
for - conditionally perform a command several times
forfiles - batch process multiple files
format - format a disk
freedisk - check free disk space (in bytes)
fsutil - file and volume utilities
ftp - file transfer protocol
ftype - display or modify file types used in file extension associations
global - display membership of global groups
goto - direct a batch program to jump to a labelled line
help - online help
hfnetchk - network security hotfix checker
if - conditionally perform a command
ifmember - is the current user in an nt workgroup
instsrv - install an nt service
ipconfig - displays your IP address.
kill - remove a program from memory
label - edit a disk label
local - display membership of local groups
logevent - write text to the nt event viewer.
logoff - log a user off
logtime - log the date and time in a file
mapisend - send email from the command line
mem - display memory usage
md - create new folders
mode - configure a system device
more - display output, one screen at a time
mountvol - manage a volume mount point
move - move files from one folder to another
moveuser - move a user from one domain to another
msg - send a message
msiexec - microsoft windows installer
msinfo - windows nt diagnostics
munge - find and replace text within file(s)
mv - copy in-use files
net - manage network resources
netdom - domain manager
netsh - configure network protocols
netsvc - command-line service controller
nbtstat - display networking statistics (netbios over tcp/ip)
netstat - display networking statistics (tcp/ip)
now - display the current date and time
nslookup - name server lookup
ntbackup - backup folders to tape
ntrights - edit user account rights
path - display or set a search path for executable files
pathping - ip trace utility
pause - suspend processing of a batch file and display a message
perms - show permissions for a user
perfmon - performance monitor
ping - test a network connection
popd - restore the previous value of the current directory saved by pushd
portqry - display the status of ports and services
print - print a text file
prncnfg - display, configure or rename a printer
prnmngr - add, delete, list printers set the default printer
prompt - change the command prompt
pushd - save and then change the current directory
qgrep - search file(s) for lines that match a given pattern.
rasdial - manage ras connections
rasphone - manage ras connections
recover - recover a damaged file from a defective disk.
reg - read, set or delete registry keys and values
regedit - import or export registry settings
regsvr32 - register or unregister a dll
regini - change registry permissions
rem - record comments (remarks) in a batch file
ren - rename a file or files.
replace - replace or update one file with another
rd - delete folder(s)
rdisk - create a recovery disk
rmtshare - share a folder or a printer
robocopy - robust file and folder copy
route - manipulate network routing tables
runas - execute a program under a different user account
rundll32 - run a dll command (add/remove print connections)
sc - service control
schtasks - create or edit scheduled tasks
sclist - display nt services
scriptit - control gui applications
set - display, set, or remove windows nt environment variables
setlocal - begin localisation of environment changes in a batch file
setx - set environment variables permanently
share - list or edit a file share or print share
shift - shift the position of replaceable parameters in a batch file
shortcut - create a windows shortcut (.lnk file)
showgrps - list the nt workgroups a user is in
showmbrs - list the members of an nt workgroup
shutdown - shutdown the computer
shutgui - shutdown the computer
sleep - wait for x seconds
soon - schedule a command to run in the near future
sort - sort input
start - start a separate window to run a specified program or command
su - switch user
subinacl - edit file and folder permissions, ownership and domain
subst - associate a path with a drive letter
tasklist - list running applications and services
time - display or set the system time
timeout - delay processing of a batch file
title - set the window title for a cmd.exe session
touch - change file timestamps
tracert - trace route to a remote host
tree - graphical display of folder structure
type - display the contents of a text file
usrstat - list domain usernames and last login
ver - display version information
verify - verify that files have been saved
vol - display a disk label
where - locate and display files in a directory tree
whoami - output the current username and domain
winmsd - windows nt diagnostics
winmsdp - windows nt diagnostics ii
wmic - wmi command
xcacls - change file permissions
xcopy - copy files and folders more

27 Haziran 2009 Cumartesi

Açık Portları Görmek

Bilgisayarda açık portları görebilmenin basit bir yolu var Eğer TCP için görecekseniz.çalıştır>cmd açarak

netstat -anop TCP.

Yazmanız yeterli

24 Haziran 2009 Çarşamba

Beta Balığı

Bu Yazılım Geliştirme blogunda nerden çıktı beta balığı muhabbeti diyebiliriniz.
Arada Bir Yazılım işlerinden sıyrılıp kendimize vakit ayırmalıyız diye düşünüyorum.Birde emin tatları çok tezzetli :) sakın he ! şaka tadına falan bakmadım zaten öyle yenilecek falan gibi değiller.
Neyse bir iki resimden sonra çarpıntı Beta Balığı yetiştirme klavuzumuzu okuyabilirsiniz.

Gözlemlerim sonucunda yazacaklarım sizlere bilgi kaynağı olacaktır. Ayrıca belki anlayamadığınız konuları bu yazdığım bilgiler sonucunda daha rahat kavramanızı sağlayacaktır.
Beta balıklarının birçok cinsi olduğuna eminim, hatta bazı duyumlardan ve bazı akvaryumla ilgili sitelerde de bulunan yazıları gördüğümde bu cins çokluğu bana aha fazla inandırıcı geldi. Ülkemizde en bilinen cins Betalar sırasıyla:
1- Betta Splendes
2- Betta Dimidiata
3- Betta Rutilans

Bu üç cinsten de ülkemizde en sık bulunanı ise Betta Splendes tir. Ayrıca bazı yerlerde Beta balıkları “siyam ya da dövüşçü balığı” olarak ta adlandırılabilir. Güney Asya’da Beta balıkları çok değerli olup, bu balıklar için “Beta Dövüş Turnuvaları” bile yapılmaktadır. Bizim ülkemizde nasıl horoz dövüşü varsa Beta balıklarının dövüş mekanı ağırlıklı olarak ta Güney Asya’dır. Beta balıklarının toplandığı yerler ise pirinç tarlalarıdır. Aslında bu balıklar derin olmayan ve hareketsiz, durgun sularda yaşamaktadırlar. Ayrıca bu suların bir bölümü pirinç tarlalarından da geçmektedir ve yavru Betalar veya yumurtalar bu pirinç tarlalarına girmekte; sonuç olarak ta oradan büyüyüp gelişmektedir.
Beta balıkları labirentli balıklardır. Labirent denilen bir organ sonucu; oksijeni çok düşük sularda bile hayatta kalmalarını sağlayan bir organdır. Bu organ sayesinde aynı insanlar gibi doğrudan havadan da oksijen alabilirler. Ürerken de köpük yuva tekniğini kullanırlar.


Bakımı

Beta balıklarının bakımı aslında çok kolay ama bazı kişiler bu olayı çok büyütmektedirler. Beta balıkları kesinlikle fanusta, kavanozda ya da bardakta beslenmez. Çünkü bu balıklar ne kadar geniş alan olursa o kadar dirençli ve güzel görünüm kazanırlar. Beta balıkları için en küçük ideal akvaryum boyutu yükseklik:30cm * genişlik:30cm ebatlarında olmalıdır. İsterseniz bu ebatları kendinizce büyütebilirsiniz.
Akvaryumun içini donatmak içinse bol bitkili olması tercih edilir ama kesinlikle koyulan bitkiler balığın yüzüşünü etkilememelidir. Suyun üstünde duran köksüz su bitkileri ve akvaryumun dibinde çim gibi duran bitkiler bu iş için çok idealdir. Ayrıca Beta akvaryumunda bulunan bitkiler, akvaryum suyunun kirlenmesini geciktirir ve balığa oksijen katkısı sağlar.
Beta akvaryumunun ısısı en az 23°C - 24°C olmalıdır. Mayıs ayından sonra ise ısıtıcınızı kapatıp tekrar Eylül ayının ikinci haftasında tekrar kullanabilirsiniz. ısıtıcınızın 26°C -28°C derecede olması Beta balığınızı kesinlikle öldürmez ama çabuk yaşlandırmaya sebep verir. Böylece balığınızın ömrü kısalır.


Yemleme konusunda ise tavsiyem, canlı yem ya da kaliteli yemlerdir. Canlı yem kullanmanız ilk tavsiyemdir. Eğer sivri sinek ve karınca rahatlıkla bulabilirseniz Beta balığınıza verin, severek tüketirler.
Akvaryumunuzda kesinlikle filtre kullanmayın. Beta balıkları hareketli suyu sevmedikleri için, filtreli bir akvaryumda kolayca stres altına girebilir ve ölümle sonuçlanabilir.
Beta balıkları akvaryum aksesuarlarının içine girip orada kalmayı çok hoşlanırlar. eğer akvaryumunuza mağara veya onların saklanabileceği ufak bir yer yaparsanız çok daha iyi olacaktır. Bazı zamanlar her şeyden uzaklaşıp, kendini stresten uzak tutmak isteyecektir ve akvaryumunuzda bulunan mağara ve oyuklar onlar için bir nevi ilaç olacaktır.
Beta balıklarını başka balıkla beslemeyin. Dişi betalar barışçıldır ancak erkekleri ise çok hırçındır.


Suyun değişimi ise her ay değiştirmek şart değildir. 2 – 3 ay gibi uzun bir süreden sonra su değişimi yapabilirsiz ancak suyu tamamen değiştirmeyip sadece belli bir ( %20) miktar değiştirmeniz tavsiye edilir.

Üretimi

Sağlık dişi ve erkek beta alıp bunları aynı akvaryum içersine koyup, akvaryumun ortasını şeffaf renkte bir cam ile bölünüz. Plastik cam koymayın. Çünkü plastik su içinde bulanık gözüküyor ve balıklar birbirlerini fark edemiyor. Ayrıca dişi için ayrı bir akvaryum daha hazırlayın. Doğumdan sonra dişiyi hazırladığınız akvaryuma koymanız gerekmektedir.
Üretim için kullanacağınız Betanızı üretimden en az 2 hafta önce kaliteli ya da canlı yemlerle beslemeniz önerilir. Çünkü yavru doğumu kaliteli ve dirençli olmaktadır. Ayrıca balık doğumdan sonra çabuk direnç kaybına uğramaz. Dişi ve erkek Betalar pastelimsi renklerde olmalıdır. Böylece daha güzel görünümlü yavrular elde edersiniz.
Akvaryumu ikiye böldüğünüzden itibaren dişi ve erkek Betalar birbirlerini görürler. Bunun sonucunda birbirlerine kur yapmaya başlarlar. Zaten ikisi de tam üreme safhasına geldiği zaman erkek Beta suyun üstüne köpük yuva çalışmasına başlar. Bu köpük yuva benim gözlemlerim sonucunda 1 – 1,5 cm arasında olmaktadır. Suyun yüzeyi adeta minik baloncuklarla dolmaktadır ve çok hoş bir görüntüsü de vardır.
Erkek Beta suyun yüzeyini tamamen köpük yuva ile bitirdiği zaman akvaryumu böldüğünüz canım yanına gelir ve hareket etmeden dişiyi izler. Tabi ki bu olaylar 1 hafta içersinde olmaktadır. Erkek Betaların bazıları 1 gün de köpük yuvayı bitirirken bazıları ise 3-4 gün arasında köpük yuvalarını bitirirler. 1 haftadan sonra dişi ve erkek betalar genellikle çiftleşme isteğinde bulunurlar. Zaten hareketlerinden belli de olmaktadır. Bu durumda dikkat edilmesi gereken en büyük olay, kesinlikle köpük yuvayı bozmadan ortadaki bölme camı kaldırmaktır. Eğer köpük yuvayı bozarsanız erkek Beta bir anlık olayla dişiyi hemen öldürür. Çünkü erkek Betanın o an için üreme konsantrasyonu kaybolmaktadır.


Orta bölme camını kaldırdığınız zaman erkek Beta hemen dişinin yanına gidip, dişiyi belinden kavrayıp yılan gibi sarmaktadır. Bu sarma sonucunda dişiden yumurtalar dökülmektedir. Eğer balık ilk defa yumurtluyorsa 25 veya daha az sayıda yumurta dökebilir. Ancak her doğumdan sonra bu yumurta sayıları fazlalaşır.
Dişi betanın yumurta dökme işi bittikten sonra dişiyi daha önce hazırladığınız temiz bir akvaryuma alınız ve dişiye canlı yem, kaliteli yemler gibi çeşitli yemlerle tekrar eskisi gibi güç kazanmasını sağlayın. Çünkü doğumdan sonra dirençsiz kalma sorunları ortaya çıkıyor. Bu olay gayet normal bir şeydir.
Erkek beta dipteki yumurtaları ağzı ile toplayıp, daha önce kurduğu köpük yuvaların içine teker teker koyar. Kesinlikle yavrularını yemez. Bu olay iç güdüsü tarafından gerçekleştirmektedir. Erkek Beta yavrularıyla birlikte ilk 3-4 gün kalabilir ama daha sonra erkek Betayı da yavruların yanından ayırmanız gerekmektedir. Belli bir zamandan sonra erkek Beta da yavrularına saldırıp onları yiyecektir.


Yavruları ilk 1-2 hafta yumurta sarısı ile besleyebilirsiniz. Ancak çok fazla vermeyin. balıkların durumuna göre hesaplayarak verin( sayısı ve boyutunu hesaplayarak). Daha sonra akvaryumculardan rahatlıkla bulabileceğiniz toz yavru yemi ve beta yavrularının bakımı için özel yemlerden alınız. Kaliteli- sağlam bir marka olmasına dikkat ediniz. Suyun çok çabuk kirlenmemesine özen gösterin. Kesinlikle filtre kullanmayın. Eğer yavrular kış mevsiminde üredilerse ısıtıcı kullanın. Eğer yazın üredilerse( haziran-temmuz-ağustos) ısıtıcıyı sabit 18 dereceye ayarlamanız yeterli olcaktır. Yavrular doğru şekilde bakldıkları takdirde bir ay gibi kısa sürede rengarenk görünüm kazanacaklardır. Ancak ileriki zamanlarda gelişimlerinden itibaren tekrar renk değişimine uğrayacaklar ve artık gerçek renk görünümlerini kazanacaklardır. Yavru akvaryumlarında en önemli husus bol bitkili olmasına dikkat edin. Çünkü hem oksijen sağlar, hem yavruların saklanma gereksinimlerini karşılar ve hem de suyu temiz tutup çabuk kirlenmesini önler.
ALİ ÇELİK

20 Haziran 2009 Cumartesi

Joining İşlemi

Veritabanları ile ilgili olarak en gıcık işlem Joining (birleştirme) işlemidir. Mulakat ta yeni bitme bir proje yöneticisi size kaç tür Join var diye sorması muhtemeldir.
Bana sorarsınız kodlamanız iyiyse join falan hikaye Ben hep şöyle yapıyorum ; Diyelim ki bir forum uygulaması yapacaksınız (kategoriler-konular -mesajlar isimli 3 adet tablo yapmamanız imkansız herhalde)şimdi en üste kategoriler var ve bunun Primary Key ile isimlendirdiniz. KATID olsun. Şimdi Kategorilerin altında Konular var bununda yine Primary Key'i KONID olsun.Aynı zamanda hangi kategorinin konusu olduğunada karar vermek için KATID isimli bir INT tipinde sutun koyuyorum.Mesajlarda konunu alt tablosu olduğuna göre Mesajlarda da bu mantıkla yaklaşırsak yine MESID isimli primary key sonrada KATID ,KONID isimli INT tipinde sutunlar hazırlıyorsunuz.
ilişki falan kurmayı unutun ciddiyim ne yapacaz dikkat !
diyelimki kategorilerden birine tıkladınız.KATID alırsınız. Konular Tablonuza bir SELECT çekersiniz Konu.KATID=Kategori.KATID kıyaslarsınız alın size o kategorinin konuları .Aynı mantığı mesajlar içinde yapabilirsiniz. Ne ilişki ne Join Ne bilmem ne Salla gitsin. NEYSE bu söylediklerimiz yasak aman performans falan düşer facebook'unuz yada Google uygulamanız yavaş çalışır. :)

Kırmızı yazdığımız yerleri göz ardı ederek şimdi Join işlemine bakalım.
Bazen iki tablodaki bilgilere ihtiyaç duyarız.Hatta belkide daha fazlasına işte bu gibi durumlarda tablolardaki kıskaçlardan(foreig keyler ve primary keyler) tutarak birbirine bağlar. Ve select ile çekeriz.
Eğer bağlamadan iki tabloya SELECT verirsek bunların tabloların kartezyen çarpımlarını verir.
Örneğin Parça tablo 100 Müşteri tablosunda 50 kayıt olsun toplam 5000 kayıt döndürecektir.Bu örnekte ki gibi SELECT * FROM Parca,Musteri

Klasik Join İşlemi
SELECT tablo1.alan1 tablo2.alan1 FROM tablo1,tablo2 WHERE tablo1.birincianahtar= tablo2.yabancıanahtar [and diğer şartlar]

şeklinde bağlam gerçekleştirilebilir.

Self Join İşlemi (Tabloyu Kendisiyle İlişkilendirme)
Aynı tabloya iki farlı takma ad atayıp (alias) farklı tablolarmış gibi sorgulamalar yapılabilir.
Genelde pek kullanılmaz ama kontrol amaçlı işlemlerde sık sık kullanılabilir. Mesela parça listesinde aynı ürün isimleri karıştırıldığı için isimleri farklı olarak girilmiş olabilir bu nedenle barkod numarasına bakarak kontrol yapabiliriz.
SELECT T1.barkodno,T1.Urunad,T2.barkodno,T2.Urunad AS Parca T1, ParcaT2 WHERE T1.barkodno=T2.barkodno AND T1.Urunad <> T2.Urunad; gibi gibi

Left[outher] Join İşlemi
birinci tablodaki tüm veriler getirilir yanına eğer ikinci tabloda ilişkiye göre veri varsa getirilir.
SELECT Uye.Adi ,Odunc.KitapNo FROM uye LEFT JOIN odunc ON Odunc.UyeID=Uye.UyeID;
Right Join İşlemi
Right[outher] Join İşlemi
ikinci tablodaki tüm veriler getirilir yanına eğer birinci tabloda ilişkiye göre veri varsa getirilir.
SELECT Uye.Adi ,Odunc.KitapNo FROM uye RIGHT JOIN odunc ON Odunc.UyeID=Uye.UyeID;
Inner Join İşlemi
En çok kullanılan tablo birleştirme yöntemidir.her iki tablodaki ortak verileri getirir.
SELECT Uye.Adi ,Odunc.KitapNo FROM uye INNER JOIN odunc ON Odunc.UyeID=Uye.UyeID;
Klasik join işlemi aynı şeydir fakat birleştirme tekniği farklıdır. iş olsun diye yapılmış işte !.

Böylece Kafa Karıştıran join işlemlerinide hal etmiş olduk.

Tabloya Takma Ad (Alias)

Sutunlara AS ifadesi ile takma at takıldığı çok kere görmüşsünüzdür. SELECT * ToplamFiyat SUM(Fiyat) as ToplamFiyat gibi Bu yazıda ise sutuna değilde tabloya takma at takmak istiyoruz.
Özellikle içiçe sorgularda ve Join sorgularında oldukca işimize yarayacaktır.

Bunu nasıl yaparız.
SELECT k.Isim ,l.Fiyat AS Musteri k , Parca l Where l.fiyat > 1000 gibi yaparız
tablolardan sonraki boşluk konularak yapılan kısaltmalara dikkat artık tablomuzun adı kısaltma ile yapılacak

View lar

Tabloların bazı durumlarda sadece bir kısmının kullanıcıya gösterilmesi gerekmektedir.Böylesi bir durumda Select sorgusu çekerek bu azaltılmış tabloda kullanıcımıza bilgilerimizi gösterebiliriz.

İşte View ler yaşayan Select cümlecikleridir.Oluşturmak için aşağıdaki şekli kullanabilirsiniz.

CREATE VIEW view_name[(column_name[,column_name]….)]
[WITH ENCRYPTION]
AS select_statement
[WITH CHECK OPTION]

şeklinde view oluşturabilir.
Örnek
CREATE VIEW vwCustomerASSELECT CustomerId, Company Name, PhoneFROM Customers

Indexler

En baba özellikleri sorgulama sürelerini kısaltmalarıdır.index oluşturarak veritabanındaki kayıt sırasından başka bir sırada sıralama yapabiliriz.
indexler Cluster index,non-Cluster index olarak ikiye ayrılmaktadır.ve baya bir özelliği var hiç sürekli bir çalışan sql de index oluşturmak nasip olmadı ama :) eskiden index çalışan tablonun index 'i izin verilmiyormuş fakat sql server 2005 ve sonrasında izin veriliyor.çok çekirdekli bilgisayarlarda bu iş için kaç çekirdek bile ayırabileceğinizi yazıyorsunuz (maxdop mesela). index oluşturma parametreleri süper
CREATE [UNIQUE][CLUSTERED NONCLUSTERED] INDEX index_ismi
ON [{database_ismi.[schema_ismi]. schema_name.}]
{table_veya_view_ismi}(sütun [ASC DESC][,...n])
[INCLUDE (sütun_ismi[,...n])]
[WITH([,...n])]
[ON {partition_scheme_name(sütun_ismi[,...n])
filegroup_ismi DEFAULT}]

::=
{ PAD_INDEX = {ON OFF}
FILLFACTOR = fillfactor değeri
SORT_IN_TEMPDB = {ON OFF}
IGNORE_DUP_KEY = {ON OFF}
STATISTICS_NO_RECOMPUTE = {ON OFF}
DROP_EXISTING = {ON OFF}
ONLINE = {ON OFF}
ALLOW_ROW_LOCKS = {ON OFF}
ALLOW_PAGE_LOCKS = {ON OFF}
MAXDOP = processor_sayısı }

Bu kadar parametreyi anlatsakta bitmez zaten bir sorun oldukca bakarsınız adamlar bununla ilgili bir şey düşünmüşler mi diye işte !

Mevcut Tabloya Sutun ekleme düzenleme

ALTERdeyimimiz var olan tablolar üzerinde işlemler yaparken kullanılıyor.

Tabloya Alan Ekleme:

Var olan bir tabloya alan eklemek için kullanacağımız ALTER TABLE komutu aşağıdaki gibidir.

ALTER TABLE tablo_adi ADD alan_adi alan_turu;

Örneğin Uyeler tablosuna, Yer adında, 50 karakter uzunluğunda bir metin alanı ekleyelim.

ALTER TABLE Uyeler ADD Yer VARCHAR(50);

Bir komutla birden fazla alan ekleme:

Tabloya birden fazla alan eklemek için kullanacağımız kod:

ALTER TABLE tablo_adi ADD (alan1 alan_turu, alan2 alan_turu, ... alan10 alanturu);

Örnek:

ALTER TABLE Uyeler ADD (Yer VARCHAR(50), Yas INT, Uye_ID Counter, Kayit_Tarihi DATETIME, Profil MEMO);

Bu kod, Uyeler tablosuna şu alanları ekler:
Yer (Metin(50))
Yas (Sayı)
Uye_ID (Otomatik Sayı)
Kayit_Tarihi (Tarih/Saat)
Profil (Not)

Tablodaki Alanları Düzenleme

Tablodaki varolan alanları düzenlemek için kullanacağımız ALTER TABLE komutu aşağıdaki gibidir.

ALTER TABLE tablo_adi MODIFY alan_adi alan_turu;

Örneğin, Uyeler tablosunda, uzunluğu 50 karakter olan Yer alanını 100 karaktere çıkaralım.

ALTER TABLE Uyeler MODIFY Yer VARCHAR(100);

Alan Silme

Tablodaki varolan bir alanı silmek için kullanacağımız ALTER TABLE komutu aşağıdaki gibidir.

ALTER TABLE tablo_adi DROP COLUMN alan_adi;

Kısıtlar (constraint) -KEY ler

Bir önceki yazıda tablo oluştururken kullandığım örnekte CONSTRAINT anahtarını kullandık bu kısıt KEY ve INDEX lerin kullanılmasını sağlar.

KEYLER
Primary KEY : bir satır veride o satırı temsil eden veridir.Tekrarsızdır (NULL)Boş Olamaz
Unique KEY : NULL olabilen Primary KEY
Foreign KEY : Bu biraz Karışık (yazgeliştir.com) bir makale ile anlatsak daha iyi gibi :)
ama Okumak istemezseniz özet olarak Tutarlı ilişkiler kurmanızı sağlar.Olmayan bir kitabın ödünç verilmememesi gibi. işte burada Foreign Key Kullanabiliriz.
--------------------------------------------------------------------------
Pek çok insan Foreign Key‘i tam manasıyla kullanmasını bilmiyor yada kullanıyor ama teorik olarak ne işe yaradığını bilmiyor. Genellikle foreign key kullanarak, tabloları ilişkilendirmede kullanırız.

Peki ya ilişkilendirme sırasında foreign key ne işe yarar?

Constraint’lerin Türkçe karşılığı kısıtlayıcılar demektir. İlişkilendirilen Bir tablonun belli yada belirli sutünlarına girilecek değerleri, ilişkilenen başka bir tablonun bir sütunundaki değer kümesiyle kısıtlamak için kullanılır. Kısıtlama sonunda İlişkilendirilen tablonun Foreign Key alanlarına girilecek değerlerin ilişkilenen tablonun birincil ( Primary Key ) alanında bulunan değerler kümesinde yer alan değerlerin kabul edilmesi, yer almayan değerlerinde kabul edilmemesi sağlanarak kısıtlanmış olur. Eğer Foreign Key kullanmadan ilişikilendirme yapmak istersek, ilişkilendirelen tabloya, ilişkilenen tablonun birincil alanının değerler kümesinde bulunmayan değerleri rahatlıkla girelebilir hale gelir. Bunu birazdan Örnekler açıkladığımda dahada iyi anlayacaksınız…

NOT: Foreign Key ile sadece girdiler kontrol edilmez. ON DELETE, ON CASCADE gibi özellikleri kullanılarak referans edilen tabloda bir değişiklik olduğunda yada silindiğinde aynısı ilişkilendirilen tabloyada yansır. Bu makalenin amacı foreign key‘in ne olup olmadığı arasında karıştıranlar için hazırladığım için konumuz dışında kalıyor. Belki başka bir makalemde o özelliklerinide anlatırım.

Örneğimizi incelemeden önce örnek çalışmamızın SQL SCRIPT halindeki kodumuzu inceleyebilirsiniz:

CREATE DATABASE [OrnekDB]
GO

USE [OrnekDB]
GO

CREATE TABLE [dbo].[Takimlar]
(
[TakimID] tinyint identity(1,1) NOT NULL,
[TakimAdi] nvarchar(50) NOT NULL

CONSTRAINT [PK_TakimID] PRIMARY KEY ([TakimID] ASC)
)
GO

CREATE TABLE [dbo].[Oyuncular]
(
[OyuncuID] int identity(1,1) NOT NULL,
[OyuncuAdi] nvarchar(50) NOT NULL,
[OyuncuUyruk] char(2) NOT NULL,
[OyuncuMevki] varchar(10) NULL

CONSTRAINT [PK_OyuncuID] PRIMARY KEY ([OyuncuID] ASC)
)
GO


CREATE TABLE [dbo].[Birlestirme_1]
(
[TakimID] tinyint NOT NULL,
[OyuncuID] int identity(1,1) NOT NULL
)
GO


CREATE TABLE [dbo].[Birlestirme_2]
(
[TakimID] tinyint NOT NULL,
[OyuncuID] int identity(1,1) NOT NULL


CONSTRAINT [FK_TakimID] FOREIGN KEY (TakimID) REFERENCES [dbo].[Takimlar]([TakimID]),
CONSTRAINT [FK_OyuncuID] FOREIGN KEY (OyuncuID) REFERENCES [dbo].[Oyuncular]([OyuncuID])
)
GO

Veritabanının Diagramı ise:



SQL Kodlarından ve Veritabanının Diagramında gördüğünüz gibi 2 tane ana tablomuz var bunlar Takimlar ve Oyuncular. ve bunlardan ayrıca Birlestirme_1 ve Birlestirme_2 diye tablolarıda göreceksiniz. Birlestirme_2 tablosunun 2 kolonunuda Foreign Key ile Takimlar ile Oyuncular tablosuna ilişkilendirildiğini görebildiğinizi umuyorum.Birlestirme_1 tablosunda ise herhangi bir kısıtlama kullanmadık.

.










Şimdi sıra geldi kayıt eklemeye:

ilk önce 3 tane takım ekleyelim;

INSERT INTO [Takimlar] VALUES (‘Galatasaray’)
INSERT INTO [Takimlar] VALUES (‘Beşiktaş’)
INSERT INTO [Takimlar] VALUES (‘Fenerbahçe’)

SELECT * FROM [Takimlar] Sorgusunu Çalıştırdığımızda:



TakimID TakimAdi
——————
1 Galatasaray
2 Beşiktaş
3 Fenerbahçe
——————
(3 row(s) affected)

Yukarıdaki sorgu sonucumuzda, Takımlarımızın, Takım ID’leri ve Takım Adları geldi.

Şimdi İse 6 tane oyuncu ekleyelim;

INSERT INTO [Oyuncular] VALUES (‘Hakan Şükür’,‘TC’,‘FORVET’)
INSERT INTO [Oyuncular] VALUES (‘Hasan Şaş’,‘TC’,‘ORTA SAHA’)
INSERT INTO [Oyuncular] VALUES (‘D.Roberto Carlos’,‘BR’,‘DEFANS’)
INSERT INTO [Oyuncular] VALUES (‘ALEX’,‘BR’,‘ORTA SAHA’)
INSERT INTO [Oyuncular] VALUES (‘İbrahim Toraman’,‘TC’,‘DEFANS’)
INSERT INTO [Oyuncular] VALUES (‘Rüştü Reçber’,‘TC’,‘KALECİ’)

SELECT * FROM [Oyuncular] Sorgusunu Çalıştırdığımızda:

OyuncuID OyuncuAdi OyuncuUyruk OyuncuMevki
————————————————
1 Hakan Şükür TC FORVET
2 Hasan Şaş TC ORTA SAHA
3 D.Roberto Carlos BR DEFANS
4 ALEX BR ORTA SAHA
5 İbrahim Toraman TC DEFANS
6 Rüştü Reçber TC KALECİ
————————————————
(6 row(s) affected)

Yukarıdaki sorgu sonucumuzda Oyuncularımızın Oyuncu ID’si Oyuncu Adları, Uyrukları ve Mevkileri Geldi…

Şimdi Bu saygı değer futbolcularımızı öyle bir tabloya koyalım ki ait oldukları takımlarda gözüksünler.

İlk önce Kısıtlama(Foreign Key) KULLANMADIĞIMIZ tablo olan Birlestirme_1 tablosuyla başlayalım.

INSERT INTO [Birlestirme_1](TakimID,OyuncuID) VALUES (1,1)
INSERT INTO [Birlestirme_1](TakimID,OyuncuID) VALUES (1,2)
INSERT INTO [Birlestirme_1](TakimID,OyuncuID) VALUES (3,4)
INSERT INTO [Birlestirme_1](TakimID,OyuncuID) VALUES (3,3)
INSERT INTO [Birlestirme_1](TakimID,OyuncuID) VALUES (2,6)
INSERT INTO [Birlestirme_1](TakimID,OyuncuID) VALUES (2,5)

Ekleme sorgumuzda görebileceğiniz gibi Birlestirme_1 tablosunda sadece TakimID’leri ve OyuncuID’lerini girdik. Takımları ve Oyuncuları Ekledikten sonra select sorgumuzla takımların ve oyuncuların ID’lerini görmüştük.

Şimdi iki tabloyu birbirine bağlı olarak sorgulamak için asıl sorgumuzu yazmaya geldik.

———————————————————
SELECT TakimAdi,OyuncuAdi,OyuncuUyruk,OyuncuMevki
FROM Birlestirme_1,Takimlar,Oyuncular
WHERE Birlestirme_1.TakimID = Takimlar.TakimID
AND Birlestirme_1.OyuncuID = Oyuncular.OyuncuID
———————————————————
SELECT t.TakimAdi,o.OyuncuAdi,o.OyuncuUyruk,o.OyuncuMevki
FROM Birlestirme_1 as b,Takimlar as t,Oyuncular as o
WHERE b.TakimID = t.TakimID
AND b.OyuncuID = o.OyuncuID
———————————————————
SELECT TakimAdi,OyuncuAdi,OyuncuUyruk,OyuncuMevki
FROM Birlestirme_1
JOIN Takimlar
ON Birlestirme_1.TakimID = Takimlar.TakimID
JOIN Oyuncular
ON Birlestirme_1.OyuncuID = Oyuncular.OyuncuID
———————————————————
SELECT t.TakimAdi,o.OyuncuAdi,o.OyuncuUyruk,o.OyuncuMevki
FROM Birlestirme_1 as b
JOIN Takimlar as t
ON b.TakimID = t.TakimID
JOIN Oyuncular as o
ON b.OyuncuID = o.OyuncuID
———————————————————


Birlestirme_1 tablosundaki verileri ilişkili bir şekilde sorgulamak için 4 farklı sorgulama çeşidini yukarıda yazdım. Bu sorgularımızdan herhangi birini çalıştırdığımızda aşağıdaki sonucu alırız:

TakimAdi OyuncuAdi OyuncuUyruk OyuncuMevki
————————————————
Galatasaray Hakan Şükür TC FORVET
Galatasaray Hasan Şaş TC ORTA SAHA
Fenerbahçe ALEX BR ORTA SAHA
Fenerbahçe D.Roberto Carlos BR DEFANS
Beşiktaş Rüştü Reçber TC KALECİ
Beşiktaş İbrahim Toraman TC DEFANS
————————————————
(6 row(s) affected)

Sorgu sonucunda gördüğünüz gibi foreign key kullanmadan birbiriyle ilişkili tabloları sorunsuzca getirdik..iki tabloyu birbirine bağlı olarak olarak sorgulamak için illa foreign key kullanmak gerekmez.

Tamam sorun yok ama asıl sorun burdan sonra başlıyor. Şimdi bizim 3 tane takımız var. Ve bunların ID’leri sırasıyla 1,2 ve 3. Peki kullanıcı Birlestirme_1 tablosuna kayıt eklerken TakimID satırına 4 yada 5 girerse ne olacak. Sizce eklermi? tabikide ekler (isterseniz deneyip kendi gözlerinizle görebilirsiniz) çünkü herhangi bir kısıtlayıcı yok! Kontrol YOK! işte FOREIGN KEY BURDA DEVREYE GİRİYOR ! ! !

Şimdi Foreign Key kısıtlayıcımız olan Birlestirme_2 tablomuza, Takimlar tablomuzun TakimID’sinde yer almayan değerler girmeye çalışacam:

INSERT INTO [Birlestirme_2](TakimID,OyuncuID) VALUES (4,3)

Hatırlarsanız Bizim takimlar tablomuzun TakimID kolonunda sadece 1,2 ve 3 ID’leri yer alıyordu. Ama biz Birlestirme_2 tablosuna ekleme sorgumuzda TakımID kolonuna 4 dedik. Yine Hatırlarsanız Birlestirme_1 tablosuna 4 nolu takım ID’si olmadığı halde ekleme şansımız vardı. Peki sizce Birlestirme_2 tablosuna eklermi dersiniz? HAYIR eklemez, ekleyemez çünkü kısıtlayıcı var kontrol var! FOREIGN KEY VAR !

sorgumuzu çalıştırdıktan sonra şöyle bir hata ile karşılaşıyoruz:

The INSERT statement conflicted with the FOREIGN KEY constraint “FK_TakimID”. The conflict occurred in database “OrnekDB”, table “dbo.Takimlar”, column ‘TakimID’.

Türkçe çevirmek gerekirse, FK_TakimID adında bir constraint yani kısıtlayıcı var diyor(foreign key). OrnekDB veritabanında dbo.Takimlar tablosunun TakimID kolonunda Yer almayan Bir Değer GİREMEZSİNİZ şeklinde bir hata veriyor.

Aşağıdaki 3 maddeyi ve Örneği Unutmadıktan sonra “Foreign Key Nedir? Ne Değildir !” Sorusuna artık rahatçana cevap verebilirsiniz.

1. FOREIGN KEY İLE VERİ BAĞLAMADIK ve BİRLEŞTİRME YAPMADIK. SADECE GİRİLECEK VERİYİ KONTROL ETTİRDİK. EN ÖNEMLİSİ VERİ TUTARLILIĞINI SAĞLAMIŞ OLDUK
2. FOREIGN KEY OLMADAN İLİŞKİLİ TABLOLAR OLUŞTURABİLDİK. ANCAK GİRİLECEK VERİYE KISITLAMA YAPAMADIK.
3. TABLOLARI BİRBİRİNE BAĞLI OLARAK SORGULAMAK İÇİN İLLAKİ FOREIGN KEY KULLANMAMIZ GEREKMEZ.


Bu makalemin sonunda Foreign Key'in ne olup olmadığını umarım kavrayabilmişsinizdir.

Bir sonraki makalemde görüşmek dileğiyle

Saygılarımla

Serkan PEKTAŞ

SQL SERVER Temel Veri Tipleri

Karakterler
Karakter veri türleri karakter dizilimlerini içerir. Dört farklı karakter türü, uzunlukları ve depolama özellikleri açısından çeşitlilik gösterirler.
* char
* varchar
* varchar(max)
* text
Char veri türü, sabit boyuttaki dizilimleri depolamak için kullanılır. Daha önce belirtildiği gibi, bu veri türünün maksimum uzunluğu/boyutu 8,000 karakterdir ki bu, eski versiyonlardaki 255 karakter limiti bağlamında kayda değer bir artıştır. Bir değişken veya bir tablo sütunu nominal boyutundan daha kısa boyuttaki bir dizilimle atanmışsa, bu değişken belirli alan uzunluklarını doldurmak için ardındaki boşluklarla tıkanmıştır.
Varchar veri türü 8,000 karakter uzunluğa kadar olan çeşitli boyutlarda dizilimleri depolar. Uzunluğu nominal boyuttan az olan karakter değeri bir sütuna veya bir değişkene atandığında SQL Server peşinden boşluklar eklemek yerine onu olduğu gibi kaydeder. Varchar veri türleri dizilimin uzunluğunu kaydetmek için 2 ilave byte kaplar/tutar.text veri türü büyük miktarlardaki datayı depolamak için kullanılır. Tek bir alan 2GB (231 - 1 byte) bilgiye kadar depolayabilir. Sadece 16 byte pointer tabloda depolanır. Bu nedenle ilave işlem, metin sütunlarının kullanımıyla ilişkilendirilir. Metin değerleri işlemi için bazı özel fonksiyonlar bulunmaktadır.Not
text veri türlerini kullanmaktan kaçının çünkü Microsoft, SQL Server’ın gelecek versiyonlarında bunu kaldırmayı planlamaktadır. Onun yerine yeni varchar (max) veri türü kullanılmalıdır.
Varchar (max), varchar veri türü gibi görünür ve işler ancak dahili yapı ve işlevselliği daha çok metin veri türü gibidir.

Unicode Karakter Dizilimleri
Microsoft Sql Server 2005 non-ASCII karakter setleri kullanan Unicode datayı depolamak için dört karakter veri türüne sahiptir. Bunlar char, varchar, varchar (max) ve metin veri türlerine eşdeğerdir ve aşağıdaki gibi adlandırılırlar:
* nchar
* nvarchar
* nvarchar(max)
* ntext
Bu yeni veri türleri ile eski veri türleri arasındaki fark; yeni veri türlerinin karakter başına 2 byte kaplayan Unicode karakterlerini tutabilmeleridir. Bu nedenle, depolayabildikleri maksimum dizilim uzunluğu, eski veri türlerindekinin yarısıdır.

Tarih Ve Saat Veri Türleri
SQL Server tarih ve saati depolamak için iki T-SQL veri türünü destekler:
* datetime
* smalldatetime

Tam Sayılar
SQL Server 1-, 2-, 4-, and 8-byte tamsayıları destekler. Bit veri türü mantıksal doğru ve yanlış değerleri temsil eden 1 ve 0 depolamak için kullanılır. Aşağıdaki tablo tamsayı veri türlerini, depolama boyutlarını ve değerlerin aralığını listeler:

int veri türleriyle ilgili en güzel şey küçük alanda oldukça fazla sayı depolayabilmesidir. Bu nedenle sık sık anahtar değerler (key values) için kullanılırlar. Ana anahtarın veri türü int ise tablo dört milyara kadar kayıt depolayabilir ki miktar herhangi bir amaç için oldukça yeterlidir. Bu nedenle tablonuzun boyutundan emin değilseniz ana anahtar olarak int kullanın.

Parasal Veri Türleri
Money and smallmoney veri türleri ondalık sayıların precionları ve küçük boyuttaki gerçek sayılar arasındaki uzlaşma/orta yoldur. Smallmoney 4 byte kaplar ve int sayılar gibi aynı dahili yapıyı kullanır. Veri ondalık noktadan sonra dört basamağa kadar olabilir. Bu nedenle –214,768.3648 ile 214,768.3647 aralığındaki sayıları smallmoney veri türünde depolayabilirsiniz. The Money veri türü bilgiyi yerleştirme için the bigint veri türüyle aynı yapıyı kullanır. Depolama için 8 byte kullanır, o yüzden değerleri -922,337,203,685,477.5808 ile +922,337,203,685,477.5807 arasında olmalıdır.
Parasal sabitler den önce $ veya diğer 18 para sembolünden biri gelebilir

Binary Veri Türleri�
Binary veri tipleri bitlerin diziliminin yerleştirilmesi için kullanılır. SQL Server dört temel çift değişkenli veri tipini, karakter veri türü ile benzer nitelikleri desteklemektedir:
* binary
* varbinary
* varbinary(max)
* image

Tablo Oluşturma

CREATE tabloadi (sutunadi1 veritipi[NOT NULL],sutunadi2 veritipi[NOT NULL],...,) şeklinde
tablo oluşturulabilir.
tabiki sutun oluşturmada bazı anahtar kelimelerle bir çok şey ekleniyor. (mesela tablonun primary key olması gibi)

ÖRNEK: CREATE ParcaList (ParcaSeri INTEGER NOT NULL CONSTRAINT ParcaNo PRIMARY KEY,ParcaAdi VARCHAR(63) NOT NULL)

Veri Tabanı Nasıl Oluşturulur-Silinir.

Veritabanını CREATE Database dbParcalar; şeklinde oluşturup,
DROP Database dbParcalar; şeklinde de silebilirsiniz.

Ders kısa oldu ama bu kadar.

SQL SERVER NOTLARI


SQL Ders Notlarımdan ve Kitaplardaki Okuduğum Bilgileri Burada Paylaşmayı düşünüyorum 70-431 sınavına hazırlanmayı düşünüyorum.
Umarım Sizin içinde faydalı olur.