Rails – Active Record – Model İlişkileri – 2

User ve Article Modelinin İlişkilendirilmesi

Daha önce User ve Profile modelini ilişkilendirdiğimiz şekilde, User ve Article modellerinide ilişkilendirebiliriz. Bu ilişkinin kurulması için “articles” tablosuna user_id foreign key’ini ekleyerek “users” tablosunu işaret etmemiz yeterlidir:

Oluşan *_add_user_id_to_articles.rb migrasyon dosyasını açalım:

user_id” alanı, integer değerdeki bir alana işaret ettiği için (users tablosunun id alanına) onun veri tipide integer olmalıdır. Migration’ı çalıştıralım:

Kurmaya çalıştığımız birden-coğa ilişkisi için Article modelimizi düzenleyelim:

Aynı şekilde User modelimize de bu ilişkiyi belirtelim:

has_one” ve “has_many” ilişkilerinde, ilişki kurulan karşı modele “belongs_to” tanımı eklemek adettendir, şiddetle önerilir.

İlişkili Modelin Oluşturulması

Rails console’u açarak biraz önce oluşturduğumuz model ilişkisinin başarılı olup olmadığını test edelim. Henüz ilişkili herhangi bir verimiz olmasa dahi (user_id değerine sahip olan article), konsol bize boş dizi döndürerek yanıt verir.

Boş bir dizi görmemize rağmen, hata almıyor oluşumuz bize ilişkinin başarıyla kurulduğunu söylüyor. “User” modelinin bir nesnesi olan “user“, artık “articles” sınıfını ve onun metodlarını miras alabiliyor.

Şimdi herhangi bir User’a bazı Article nesneleri ekleyelim:

  • Eğer uygulamanızda hiç bir article nesnesi yoksa “create” metoduyla oluşturabilirsiniz.;

Test edelim:

Hepsini listeleyelim:

“<<” operatörü ile ilk Article nesnesini user nesnemiz ile ilişkilendirdik, yani bir nevi atama yaptık. “<<” operatörünü çeşitli şekillerde kullanabiliriz:

Bu operatör, kurduğu ilişkiyi otomatik olarak kayıt etmektedir. Yani “save” modeliyle “user” nesnemizi kayıt etmemize gerek kalmadı. Foreign-key’in oluşturulup oluşturulmadığını test edelim:

Aynı şekilde Article nesnesinin ilişkili olduğu kullanıcıya bakalım:

Aşağıdaki tabloda; User ve Article arasında “has_many” ve “belongs_to” ilişkisi kurulduğunda otomatik olarak oluşan metodların bir özeti bulunmaktadır:

  • “user”ın, User modelinin bir nesnesi olduğu varsayılmıştır.
METOD TANIM ÖRNEK
user.articles İlişkili tüm articles nesnelerini bastırır. İlişkili nesne yoksa boş dizi basar. user.articles
user.articles << article Bir veya birden çok article nesnesi user’la ilişkilendirir ve foreign key’lerini kayıt eder. user.articles << article
user.articles << Article.new(attributes={}) Oluşturulan yeni Article nesnesini user’la ilişkilendirir. user.articles << Article.new(:title => “One to Many Relations”, :body => “Learning Relations”, :location => “Samsun”)
user.articles.first Kullanıcıyla ilişkili ilk article’ı döndürür. user.articles.first
user.articles.delete(articles) Bir veya birden çok article nesnesinin atamasını siler ve foreign key’lerini temizler. user.articles.delete(1)
user.articles.empty? Kullanıcıyla ilişkili article var mı yokmu kontrol eder. İlişkili article yoksa false döndürür. user.articles.empty?
user.articles.size Kullanıcıyla ilişkili article sayısını basar user.articles.size
user.article_ids Kullanıcıyla ilişkili article’ların id’lerini basar. user.article_ids
user.articles.clear Kullanıcıyla ilişkili tüm article’ların foreign key’lerini temizler. user.articles.clear
user.articles.find Kullanıcıyla ilişkili article’ları ID’sine göre arar. user.articles.find(8)
user.articles.build(attributes={}) Kullanıcıyla ilişkili yeni bir article nesnesi oluşturur ancak onu kaydetmez. user.articles.build(:title => “Relations”, :body => “Ütopyalar Güzeldir”, :published_at => “2013-12-26”, :location => “Istanbul”) 

user.save

user.articles.create(attributes={}) Kullanıcıyla ilişkili yeni bir article nesnesi oluşturur ve kayıt eder. user.articles.create(:title => “Relations”, :body => “Ütopyalar Güzeldir”, :published_at => “2013-12-26”, :location => “Istanbul”)
user.articles.count Kullanıcıyla ilişkili article sayısını döndürür. user.articles.count

has_many İlişkisine Ait Model Seçenekleri

Metodlar haricinde, model ilişkilerine müdahale etmemizi sağlayan bazı seçeneklerde mevcuttur. Aşağıdaki tabloda bu seçeneklerin bir özetini görebilirsiniz.

 Seçenek  açıklama  örnek
:class_name İlişkiye ait nesne ismi convention’dan tespit edilemediğinde class_name belirtmek için. has_many :articles, :class_name => “Post”
:conditions SQL – WHERE sorgusunda çalıştırılacak şartların belirtildiği option. has_many :articles, :conditions => “active = 1”
:foreign_key Convention’dan foreign_key tespit edilemediği durumlarda foreign_key belirtmek için has_many :articles, :foreign_key => “post_id”
:order SQL – ORDER_BY sorgusunun emsali. has_many :articles, :order => “published_at DESC”
:dependent :destroy olarak ayarlandığında ilişkili nesne silindiğinde alt verileride siler. Örneğin User silindiğinde, o User’a ait tüm article’ların silinmesi gibi. 

:nullify olarak ayarlandığında :destroy’dan farklı olarak nesneleri silmez, onların foreign keylerini boşa çıkartır.

has_many :articles, :dependent => :destroy 

has_many :articles, :dependent => :nullify

İlişki Seçeneklerinin Uygulanması

Daha eski tarihte oluşturulan article’ın en sonra, yenilerin ise en üstte çıkması için “:order” seçeneğini kullanabiliriz.

Eğer aynı günde paylaşılan birden çok article varsa ve bunları kendi içinde “title“ına göre sıralatmamız yani birden çok ORDER_BY sorgusu kullanmamız gerekiyorsa ikinci bir şart yazabiliriz:

Bağımlılıkların Tanımlanması

User silindiğinde, o user’la ilişkili tüm article’ların silinmesini :destroy ile sağlayabiliriz:

İlişkili article’ları silmek yerine, ilişkilerini temizlemek istiyorsak :nullify kullanabiliriz:

To be continued.

Gem – awesome_print

Rails console, IRB, PRY ve Logger’da daha “şık” ve biçimlendirilmiş çıktılar almak için kullanılır.

Kurulum

Kullanım

Örneğin Rails Console’da, default ayarlarla örnek bir çıktı şu şekilde:

awesome_print” kullanılıyorken ise:

Çeşitli kaynaklarda bu gem’in yalnızca development ortamında kullanılması, production ortamında performans kayıplarına yol açtığı belirtilmiş.

Dökümantasyon: https://github.com/michaeldv/awesome_print

Rails – Active Record – Model İlişkileri – 1

Rails’in konvansiyonel yapısının bir getirisi olarak, modeller arasındaki ilişkiler yani veritabanı tabloları arasındaki ilişkiler, Rails üslubuna sağdık kalınırsa – oldukça hızlı kurulabilir.

Geleneksel yöntemlerle, RBDMS‘lerde bu ilişkileri nasıl yaptığımızı hatırlayalım. Çok çok basit anlatmak gerekirse ilişkilendirilecek olan tablolardan birinin primary key’i diğerinin foreign key’ine eşlenerek tablolar arasında ki ilişkiler kurulmuş olur. Rails’te ise foreign-key pattern’i şu şekildedir:

rbdms-relations
Örnek İlişki Modeli

Rails’in model ilişkilerinde kullandığı yapı örneği:

 Model  Tablo adı  tabloya ilişkilenen foreıgn key
Article articles article_id
Person people person_id
Friend friends friend_id
Category categories category_id
Book books book_id
  • Benzer bir yapı MVC’den hatırlanabilir. M = article.rb, V = articles/*, C= articles_controller.rb

Rails’te tabloların birbiriyle ilişki kurabilmesi için, ilişki kurulacak tabloda foreign key oluşturmak gereklidir. Primary key’ler ise Rails tarafından otomatik olarak oluşturulur. Foreign key’i nerede oluşturmanız gerektiğini hatırlamak için “belongs_to” içeren modeli tespit edebilirsiniz. Foreign key, belong_to metodunu içeren modelde, yani child-parent ölçeğinde bakarsak – child modelde belirtilir.

Yukarıdaki örnek ilişki görselini ele alacak olursak, model ilişkilerini kurduktan sonra modele Article.comments gibi erişim imkanımız olacak.

İlişkileri kurarken kullanılan class metodları:

  • has_one
  • has_many
  • belongs_to
  • has_and_belongs_to_many

Örneğin, Message modelinin birden çok Attachment içerdiği, Attachment‘ların ise Message‘lara ait olduğu bir kurguda, model ilişki tanımları şuna benzer olur:

class Message < ActiveRecord::Base
has_many :attachments
end
class Attachment < ActiveRecord::Base
belongs_to :message
end

Bu tanıma göre Active Record; attachments isminde, message_id alanını foreign key olarak içeren tabloyu bulmayı bekler. Bu ilişki sayesinde Message.first.attachments gibi model çağrıları yapabilir duruma geliriz. Aynı şekilde, Attachment.first.message gibi model çağrılarıda yapabileceğimiz için – kurulan bu ilişkinin çift taraflılığından söz edilebilir.

Bire Bir İlişkiler

Bire Bir ilişkiler, isminden de anlaşılacağı üzere bir tablo alanının diğer bir tablo alanıyla doğrudan eşleştirilmesidir. Örneğin User ve Profile modellerimiz olsun. Her User’ın, sadece bir tane Profile’ı olacak, Profile’lar ise doğal olarak User’lara ait olacak. Rails’te bu ilişkiyi has_one ve belongs_to metodları ile sağlamak oldukça basittir.

Herhangi bir uygulamada, User modeli oluşturalım:

Birde, User modeli ile ilişkilendireceğimiz Profile modelini oluşturalım:

User modelini oluştururken bir primary key tanımlaması yapmadık. Ancak Profile modelini oluştururken convention’a sağdık kalarak “user_id:integer” ile foreign key tanımlaması yaptığımıza dikkat!

DB’yi migrate ettikten sonra, modellerimiz içerisinde tanımlamaları yapalım:

user.rb 
profile.rb 

has_one” ve “belongs_to” ifadelerini OOP yapısında ki parent-child ilişkisine benzetebiliriz.

model-relations

İlişkilerle ilgili bir kaç örnek yapabilmek için console’u açalım:

  • reload!” ile mevcut console oturumunu yeniden başlatabiliriz. Böylece console’u açıp kapatmadan, yeni oluşturduğumuz modellerin, nesnelerin vs. console’da kullanılabilir hale gelmesini sağlarız.

Şuan hem “profile” hemde “user” nesnelerimizi oluşturduk, fakat hala bunlar arasında bir ilişki bulunmuyor. İlişkiyi kuralım ve kaydedelim:

Yukarıda gerçekleştirdiğimiz nesne oluşturma, ilişkileri kurma ve kayıt etme adımlarını şöylede yapabilirdik:

create_profile” metodu, tüm “has_one” ilişkilerinde çalışır. Active Record create_#iliski_ismi metodunu bizim için hazırlar ve oluşturur.

Aşağıdaki tabloda, User ve Profile arasında “has_one” ve “belongs_to” ilişkisi kurduğumuzda Active Record tarafından oluşturulan diğer metodların bir özeti bulunuyor:

has_one_relations

“has_one” ifadesi ayrıca, davranışını değiştirecek aşağıdaki seçenekleri içerebilir:

has_one_options

Birden Çoğa İlişkiler

Birden -> Çoğa ilişkiler isminden de anlaşılacağı üzere, bir veritabanı tablo alanının, başka bir (veya birden çok) tablo alanı ile ilişkilendirilmesini ifade eder.

Aşağıda ki görselde, bir “User”ın birden çok Article’a sahip olabileceği ve her bir Article’ın bir User’a sahip olduğu (bağlı olduğu) gösterilmektedir:

one-to-many-relations

To be continued.

Rails CRUD Cheatsheet

Metod Etkı alanı Örnek NOT
new Model Student.new

Student.new(:adi => “Serhat”, :soyadi => “Dundar”)

Model bir nesneye atandığında, nesnenin “save” metodu ile kayıt edilmesi gerekir.
new_record? Nesne student.new_record? true veya false döndürür.
attributes Nesne student.attributes attribute’leri hash olarak döndürür.
*attribute_ismi Nesne student.finalnotu = “65” Model ismi komut olarak çağırılarak mümkün attribute’ler listelenebilir.
save Nesne student.save SQL muadili: INSERT INTO. Eğer nesne daha önceden mevcutsa UPDATE.
count Model & Nesne student.count

Student.count

SQL muadili: SELECT COUNT(*) FROM “students”
create Model Student.create(:adi => “Serhat”, :soyadi => “Dundar”)

veya;

x = {:ad => “Serhat”, :soyad=> “Dundar”}

Student.create(x)

“new” metodundan farklı olarak doğrudan save işlemi yapar. SQL muadili: INSERT INTO
find(:id) Model & Nesne Student.find(1)

Student.find([1,5])

“find” metodunu bir nesneye atayıp, daha sonra nesneyi çaşitli işlerde kullanabiliriz. SQL muadili: SELECT “students”.* FROM “students” WHERE “students”.”id” = ? LIMIT 1  [[“id”, 1]]
first Model & Nesne Student.first SQL muadili: SELECT “students”.* FROM “students” ORDER BY “students”.”id” ASC LIMIT 1
last Model & Nesne Student.last SQL muadili: SELECT “students”.* FROM “students” ORDER BY “students”.”id” DESC LIMIT 1
all Model Student.all SQL muadili: SELECT “students”.* FROM “students”
class Model & Nesne Student.class [Class]

student.class [Array]

size Nesne student.size Nesnenin boyutunu verir.
order Model Student.order(“ogrenci_no”) SQL muadili: SELECT “students”.* FROM “students” ORDER BY ogrenci_no
where Model Student.where(:ogrenci_no => “09310009”) SQL muadili: SELECT “students”.* FROM “students” WHERE “students”.”title” = ‘My first post’
update_attributes Nesne student.update_attributes(:ad => “Mustafa”, :ogrenci_no => “08310009”) true veya false döndürür.
destroy Nesne & Model Nesne üzerinde kullanım:

student = Student.last && student.destroy

Model üzerinde kullanım:

Student.last.destroy

veya;

Student.destroy(1)

veya;

Student.destroy([1,5])

DELETE FROM students WHERE id = 5;

* Nesne üzerinde kullanıldığında, kayıt silinmiş olmasına rağmen “student” nesnesi hala bellekte tutulur, fakat durumu read-only’dir, yani frozen durumdadır.

delete Model Student.delete(1)

veya;

Student.delete([1,5])

“find” ve “create” gibi işlemi anında uygularlar. SQL muadili: DELETE FROM “students” WHERE “students”.”id” = 1
delete_all Model Student.delete_all(“ogrenci_no = 09310009”) “delete”den farklı olarak şartlı silme işlemlerini yapar.

* delete_all argümansız çalıştırılırsa tablonun tüm satırlarını siler!

“Model” üzerinde etki gösteren metodlar, kimi kaynaklarda “class” üzerinde etki gösteriyor şeklinde belirtilebilir. Model’lerde class olduğu için Model = Class varsayılabilir.

Rails – MVC Yapısı

Model

Rails’te model katmanı veritabanı ile olan ilişkilerden sorumludur. Genellikle her bir model, bir veritabanı tablosu ile iletişim halindedir. Örneğin Student modeli, veritabanında students tablosu ile ilişki kurar. Student modeli, bu tablo üzerinde CRUD yani Create, Read, Update ve Delete işlerini yapar. Örneğin tabloda arama yapmak için şöyle bir sorgu kullanırız:

Controller

Controller MVC modelinin en önemli kısmıdır. Rails’de controller, dış dünyadan yani kullanıcıdan istekleri kabul eder, gerekli işlemleri uygular ve sonuçları view katmanına gönderir. Web istekleri, değişkenlerin ve verilerin işlenmesi, çeşitli bilgiler için Model’e başvurulması, işlenen verilerin kayıt için tekrar Model’e yollanması gibi işlerin hepsi Controller sorumluluğundadır. Controller genellikle Model üzerindeki CRUD işlemlerini idare eder, view’da kullanılacak değişkenleri düzenler.

View

MVC yapısında View, uygulamanın kullanıcıya görünen yüzüdür. View’ın, Model ile yapacağı herhangi bir iletişim mutlaka Controller üzerinden gerçekleştirilmelidir! Bu sayede hem view temiz kalmış olur hemde MVC çatısından kopmamış oluruz.

View, bizim model nesnelerimizin kullanıcıya sunulması ve formatlanmasından sorumludur. Kullanıcıya sunduğu formlar, input kutuları, butonlar vb. ile kullanıcıyla iletişime girerler.

Rails yapısında birde Controller ve View’ı birbirine kolayca bağlamak için “helper”lar kullanılır. Helper’lar sayesinde örneğin bir kayıt validasyon kurallarından geçemediyse ve kullanıcıya hata göstermemiz gerekiyorsa Helper’lardan yararlanabiliriz.

Rails’i Oluşturan Kütüphaneler

Active Record: Veritabanı ile iletişimi yönetir.

Action View: HTML dosyalarını oluşturan templating sistemidir ve kullanıcıdan aldığı girdileri Rails uygulamasına paslar.

Action Controller: Hem uygulama akışını hemde veritabanından gelerek view’da gösterilecek olan verileri yönetir.

MySQL Developer I – Sınav Hazırlığı

Oracle Certified Proffessional MySQL Developer 5 sınavına çalışırken tuttuğum notların bir kısmı.

1. Client Aracını Başlatmak

Kullanılabilir olan tüm argümanları listeler.

Sürüm bilgisini ekrana basar. Argümanlar case-sensitive’dir. Yani mysql -V ile mysql -v farklı şeylerdir. Eğer lokal makinede ki mysql’i çalıştırmak istiyorsak mysql komutu yeterlidir. Ancak uzakta ki bir host’ta barınan mysql server’ı çalıştırmak istiyorsak;

veya

kullanmak gerekir.

2. Bağlantı Parametreleri

  • –protocol : Bağlantı için kullanılacak protokol.

protokol için aşağıda ki seçimler kullanılabilir:

  1. tcp: TCP/IP – Tüm işletim sistemleri için lokal veya remote bağlantıda çalışır.
  2. socket: Sadece Unix – sadece lokalde çalışır.
  3. pipe: Sadece Windows – sadece lokalde çalışır.
  4. memory: Paylaşımlı bellek için, sadece Windows, sadece lokalde çalışır.

Eğer –protokol argümanı belirtilmezse bağlantı protokolü, server hostname ve client’in işletim sistemine göre belirlenir! Aşağıda ki diğer argümanlar, yalnızca –protokol argümanı belirtilmediği zamanlarda kullanılabilir!

  • –host : MySQL server’ın çalıştığı host. Bir domain veya IP adresi olabilir. Kısa yazılışı -h. Default hostname ise localhost’tur.

veya

şeklinde kullanılır.

  • –port : TCP/IP bağlantısı için kullanılacak olan port numarası. MySQL default port numarası 3306’dır.

veya

şeklinde kullanılır.

  • –shared-memory-base-name : Paylaşımlı bellek kullanımı için bellek kullanımı için shared-memory ismi. Default değeri büyük harflerle MYSQL’dir.

  • –socket : Unix socket adı
  • –user : Veritabanı kullanıcı adı

veya

şeklinde kullanılabilir.

  • –password : Kullanıcı adına ait şifre.

veya

şeklinde kullanılabilir. -p örneğinde arada boşluk olmadığına dikkat ediniz! Boşluk kullanırsanız hata alırsınız! Kısa kullanımlarda ki bu boşluk kuralı yalnızca -p için geçerlidir. -hserhat.domain.com veya -h serhat.domain.com hiç bir sorun vermeden çalışacaktır. Ayrıca –password veya -p için hiç bir şifre argüman olarak girilmeyebilir. Zaten önerilen de güvenlik açısından budur. Aksi halde log dosyalarına şifreleriniz kayıt edilmiş olacaktır. Eğer yalnızca -p kullanırsanız ve şifrenizi yazmazsanız, mysql server bağlantı aşamasında size şifre soracaktır. Yavaş çalışan bir network’ten bağlantı kurarken -C veya –compress argümanını kullanabilirsiniz. Bu argüman sayesinde arada kurulan iletişim, client tarafında compress edilir ve sunucuya compress edilmiş veri yollanır. Sunucu ise bu veriyi uncompress eder ve yanıtını compress ederek tekrar client’a gönderir. Client ise bu yanıtı uncompress ederek okur. Bu durumun ağ üzerinde veri paketlerini küçültücü bir etkisi vardır. Ancak, aynı zamanda makineler üzerinde compress/uncompress yapılmasını gerektiren ekstra bir işlemdir. Örnekler: Uzun yazılış:

Kısa yazılış:

3. Ayar Dosyası Hazırlamak

Ubuntu’da konfigürasyon dosyaları /etc/mysql/my.cnf yolunda bulunmaktadır ve bu global konfigürasyon dosyasıdır – tüm kullanıcılar için uygulanır. Eğer bir kullanıcıya özel bir konfigürasyon dosyası hazırlamak istiyorsanız, bu global dosyayı home dizininize ~/.my.cnf adıyla kopyalayıp üzerinde değişiklik yapabilirsiniz. Eğer hem global dosya, hemde home dizininde my.cnf dosyası var ise – daima global konfigürasyon dosyası ilk olarak okunur! Ek olarak, bu dosyayı okumak için “sudo” kullanmalısınız. Örneğin;

Bu dosyada grup isimleri köşeli parantezler içerisinde belirtilir. Örneğin [client] grubu, tüm client’ların mysql sunucusuna nasıl bağlanacağını belirleyen ayarları içerir. Bir gruba ayar yazarken her zaman argümanların uzun isimlerini kullanmalısınız. Yani “-h” yerine “–host” kullanılması gerekmekte. Ancak bu dosyaya özel bir durum olarak başlangıçta ki “–” işaretlerinin de kullanılmaması gerekiyor.

  • Client tarafından bağlantı kurarken, programa standart ayar dosyaları yerine spesifik bir dosyayı ayar dosyası olarak okumasını söyleyecekseniz:

parametresini, satırdaki ilk parametre olacak şekilde ekleyin. Örneğin:

  • Programa, standart ayar dosyaları ile birlikte, kendi ayar dosyanızı da okumasını söyleyecekseniz:

parametresini, satırda ki ilk parametre olacak şekilde ekleyin. Örneğin:

Programın tüm ayar dosyalarını görmezden gelmesini istiyorsanız:

parametresini, satırda ki ilk parametre olacak şekilde ekleyin. Ayar dosyasından örnek satırlar:

4. Veritabanı Seçimi

Dump alırken şu şekilde bir seçim yapmanız gerekecektir:

Sorguları ise bir veritabanı seçmeden de yazabileceğiniz gibi:

Veritabanını seçtikten sonra, her seferinde adını yazmaktan da kurtulabilirsiniz:

5. Server SQL Modları

SQL modları, sql_mode sistem değişkeni ile tanımlanır. Default olarak sql_mode değişkeninin değeri boştur. SET ifadesi ile bu değişkene bir değer atamak mümkündür. Değer boş bir string olabileceği gibi, bir veya birden fazla mode’un virgüllerle ayrılmış olarak yazılmasından da oluşabilir.

Eğer değer boş ise, veya birden çok mode ismi içeriyorsa tırnak işaretleri arasına alınmazı zorunludur. Ancak değer tek bir mode ismi ise, tırnak işaretleri opsiyoneldir.

SQL Mode’u temizler:

SQL Mode’u tek bir değere eşitler. Tırnak işareti opsiyonel olduğu için yok:

SQL Mode’u tek bir değere eşitler. Tırnak işareti opsiyonel olduğu için var:

SQL Mode’u birden çok değere eşitleyelim:

SQL mode ataması yaptıktan sonra, değerin uygulanıp uygulanmadığını kontrol etmek ve uygulanmış olan sql_mode’ları görmek için;

sorgusunu yapabilirsiniz.

SET işlemi bir veriye yeni bir değer atama işlemidir ve bu işlem sonucunda değişkenin eski değeri silinir!

Bazı SQL modları, birden çok modu içerir. Örneğin TRADITIONAL modu böyledir.

sorgusunu yaptıktan sonra,

şeklinde kontrol ederseniz, bir modlar serisinin set edildiğini görebilirsiniz:

SQL modları ve açıklamaları hakkında bilgiyi şuradan bulabilirsiniz: http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

6) MySQL Client Aracı

Bu araç hem interactive hemde batch mode olmak üzere iki şekilde çalışır. Interactive mod genelde günlük işleri yapmakta, sorguları hemen deneyip sonuçlarını anında görmek için kullanılır. Batch mod ise, daha önceden hazırlanmış sorguları bir dosyadan çalıştırmak için kullanılır. Yani aradaki fark birinde girdi aracı klavye iken diğerinde bir dosya olmasıdır.

Interactive kullanım için bağlantı kurarken çeşitli parametreler gireriz.

veya direk kullanacağımız veritabanını da girebiliriz:

Örneğin veritabanımıza bağlanmış olup “django” isimli veritabanını kullanıyor olalım. Kullanım için ya bağlanırken veritabanı adını parametre olarak vermiş olmalıyız, ya da daha sonradan “USE django” sorgusunu yapmış olmalıyız.

SELECT database() ile kullanmakta olduğumuz veritabanını görürüz:

Tek bir satırda, noktalı virgülden sonra başka sorgularda girebiliriz:

Eğer sorgunuzu yazarken karar değiştirdiyseniz ve bu sorgunun çalışmamasını! istiyorsanız “\c” ile bitirmeniz yeterlidir.

Eğer bu şekilde 2 ayrı sonuç istemiyor ve sonucu tek bir tablonun farklı sütunları olarak görmek istiyorsanız “,” virgül kullanabilirsiniz:

MySQL’den çıkmak için aşağıda ki komutlardan herhangi birini kullanabilirsiniz;

MySQL’e giriş yapmadan da, MySQL sorgularınızı çalıştırabilirsiniz. Bunun için “-e” veya “–execute” komutu vermeniz yeterlidir:

7) İfade Sonlandırıcılar

MySQL’de sık kullanılan 3 çeşit ifade sonlandırıcı vardır.

ile ifadenizi bitirdiğiniz anda sorgu sunucuda çalıştırılır.

ise noktalı virgül ile aynı işi yapar.

ise yine ifadeleri sonlandırır ancak sonuçlar tek bir satırda yazılarak output edilir:

8) MySQL İstemleri (Promptlar)

mysql> Yeni bir ifade beklenmekte

9) MySQL ile Script Dosyalarını Kullanmak (Batch Mode)

Sorgu script dosyalarını çalıştırmak için “SOURCE” sorgusu kullanılır.

Shell’deyken MySQL’e bağlanmadan da script dosyalarını çağırabilirsiniz:

UYARI: Script dosyaları da SOURCE sorgusunu içerebilir. Örneğin sorgu1.sql dosyasını SOURCE ile çağırdığınızda, sorgu1.sql dosyasıda kendi içinde sorgu2.sql dosyasına bir çağrı yapıyor olabilir. Burada sonsuz bir döngü oluşturmamaya dikkat edilmelidir! Örneğin sorgu1.sql dosyasında “SOURCE sorgu2.sql” satırı var ise – ve aynı zaman sorgu2.sql dosyasında “SOURCE sorgu1.sql” satırı varsa içinden çıkılamayan bir döngü meydana gelir!

10) MySQL Çıktı Formatları

Batch formatta output almak için -B veya –batch parametreleri kullanılır:

Çıktı şu şekilde olacaktır:

Tablo formatında çıktı almak için -t veya –table parametreleri kullanılır:

Çıktı şu şekilde olacaktır:

HTML formatında çıktı almak için –html veya -H parametreleri kullanılır:

Çıktı şu şekilde olacaktır:

XML formatında çıktı almak için –xml veya -X parametreleri kullanılır:

Çıktı şu şekilde olacaktır:

11) STATUS Komutu

“status” komutu ile MySQL serverınız hakkında aşağıdakine benzer bilgiler alabilirsiniz:

12) HELP komutu

help” komutu ile parametrelerin kullanımı hakkında bilgi alabilirsiniz:

Eğer bir komutun – sorgunun ne işe yaradığını hatırlayamıyorsanız onu “help” komutu ile birlikte çağırabilirsiniz:

13) –safe-updates ve –i-am-a-dummy

Eğer MySQL’de yeniyseniz veya dalgınlıkla çok fazla veriyi uçurmaktan çekiniyorsanız –safe-updates ve –i-am-a-dummy parametreleri yararlı olacaktır. Her ikisi de aynı işe yarar. Bu parametreler verildiğinde;

  • UPDATE ve DELETE sorguları yalnızca WHERE ifadesi veya LIMIT ifadesi ile devam ediyorsa çalıştırılır.
  • SELECT sorgusu 1.000 satırla sınırlandırılmıştır.
  • Çoklu SELECT sorgularında toplam gösterilecek kayıt sayısı 1.000.000 ile sınırlandırılmıştır.

14) MySQL Query Browser

MySQL Query Browser artık kullanılmayan bir yazılımdır ve ismi MySQL Workbench olarak değişmiştir. Aşağıda ki adresten indirip kurabilirsiniz:

http://dev.mysql.com/downloads/tools/workbench/#downloads

Ubuntu’da synaptic packet manager ile kolayca bulup – kurabilirsiniz. Yazılım “Databases (Universe)” kategorisi altında bulunuyor.

15) MySQL Konnektörleri

MySQL AB firması, MySQL serverlarına erişmek için kullanılan bir çok API duyurmuştur. MySQL’in kendi içerisinde gelen libmysqlclient C kütüphaneside bunlardan biridir. Bu API sayesinde C-tabanlı MySQL programları yazılabilir.

MySQL AB firması ayrıca, görevi MySQL serverlarına belli protokoller üzerinden bağlanmak olan client araçları ile MySQL serverlar arasında köprü olarak çalışacak driverlar (sürücüler) geliştirmiştir. Örneğin;

MySQL Connector/ODBC ODBC (Open Database Connectivity) için MySQL’e özel bir sürücüdür. ODBC uyumlu programların MySQL’e bağlanmalarını sağlar.

MySQL Connector/J ise Java programları tarafından kullanılan bir JDBC (Java Database Connectivity) sürücüsüdür. JDBC uyumlu yazılımların MySQL’e bağlanmasını sağlar.

MySQL Connector/NET sürücüsü ise C# dili ile yazılmış bir sürücüdür ve ADO.NET’i destekler. Bu sürücü sayesinde .NET uygulamaları MySQL’e bağlanabilir.

MySQL konnektörleri sunucuya değil client’a kurulmalıdır. Client ve Sunucu arası konnektör ilişkisi platform bağımsızdır. Yani client Windows bir makinadan ilgili konnektörü kullanarak Unix bir makinada bulunan MySQL’e bağlanabilir.

16) Veri Türleri

Vaktim olursa devam edecek.