SQL (Structured Query Language), ilişkisel veritabanlarını yönetmek ve sorgulamak için kullanılan standart bir dildir. SQL, verileri eklemek, güncellemek, silmek ve sorgulamak için çeşitli komutlar sağlar. SQL’in temel yapısını ve en yaygın kullanılan veri türlerini MySQL ve PostgreSQL özelinde anlatacağım.
1. SQL’in Temel Yapısı
SQL, birkaç temel bileşenden oluşur:
- DDL (Data Definition Language – Veri Tanımlama Dili): Veritabanı nesnelerini tanımlamak için kullanılır. Örnek:
CREATE
,ALTER
,DROP
. - DML (Data Manipulation Language – Veri İşleme Dili): Veriler üzerinde işlem yapmak için kullanılır. Örnek:
INSERT
,UPDATE
,DELETE
,SELECT
. - DCL (Data Control Language – Veri Kontrol Dili): Kullanıcı izinleri ve güvenliği yönetmek için kullanılır. Örnek:
GRANT
,REVOKE
. - TCL (Transaction Control Language – İşlem Kontrol Dili): Veritabanı işlemlerini yönetmek için kullanılır. Örnek:
COMMIT
,ROLLBACK
,SAVEPOINT
.
2. SQL Veri Türleri (MySQL ve PostgreSQL Karşılaştırması)
Veritabanında her sütun belirli bir veri türü ile tanımlanır. Doğru veri türünü seçmek, performans ve veri bütünlüğü açısından önemlidir. Aşağıda, MySQL ve PostgreSQL için yaygın kullanılan veri türleri karşılaştırmalı olarak verilmiştir.
2.1 Sayısal Veri Türleri
Veri Türü | MySQL | PostgreSQL | Açıklama |
---|---|---|---|
TINYINT |
✅ | ❌ | 0 ile 255 arasında küçük tam sayılar için kullanılır. |
SMALLINT |
✅ | ✅ | Küçük tam sayılar için kullanılır. |
MEDIUMINT |
✅ | ❌ | MySQL’de orta büyüklükte tam sayılar için kullanılır. |
BIGINT |
✅ | ✅ | Büyük tam sayılar için kullanılır. |
DECIMAL(p,s) |
✅ | ✅ | Hassas ondalıklı sayılar için (p = toplam basamak, s = ondalık basamak). |
NUMERIC(p,s) |
✅ | ✅ | DECIMAL ile aynı. |
FLOAT |
✅ | ✅ | Kayan noktalı sayılar (hassasiyet değişebilir). |
REAL |
❌ | ✅ | PostgreSQL’de FLOAT’a benzer, ancak daha az hassasiyet gerektirir. |
Örnek:
CREATE TABLE Musteriler (
ID SERIAL PRIMARY KEY,
Bakiye DECIMAL(10,2) NOT NULL
);
2.2 Metin (String) Veri Türleri
Veri Türü | MySQL | PostgreSQL | Açıklama |
---|---|---|---|
CHAR(n) |
✅ | ✅ | Sabit uzunlukta metin. |
VARCHAR(n) |
✅ | ✅ | Değişken uzunlukta metin. |
TEXT |
✅ | ✅ | Çok uzun metinler için kullanılır. |
Örnek:
CREATE TABLE Urunler (
UrunAdi VARCHAR(50),
Aciklama TEXT
);
2.3 Tarih ve Zaman Veri Türleri
Veri Türü | MySQL | PostgreSQL | Açıklama |
---|---|---|---|
DATE |
✅ | ✅ | Yıl, ay ve günü saklar. |
TIME |
✅ | ✅ | Saat, dakika ve saniye saklar. |
DATETIME |
✅ | ❌ | MySQL’de tarih ve saat saklamak için kullanılır. |
TIMESTAMP |
✅ | ✅ | Unix zaman damgası olarak saklanan tarih/saat formatı. |
Örnek:
CREATE TABLE Siparisler (
SiparisID SERIAL PRIMARY KEY,
SiparisTarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2.4 Mantıksal (Boolean) Veri Türleri
Veri Türü | MySQL | PostgreSQL | Açıklama |
---|---|---|---|
BOOLEAN |
❌ (TINYINT(1) olarak kullanılır) | ✅ | TRUE veya FALSE değeri saklar. |
Örnek:
CREATE TABLE Kullanicilar (
ID SERIAL PRIMARY KEY,
Ad VARCHAR(50),
Aktif BOOLEAN DEFAULT TRUE
);
3. MySQL ve PostgreSQL Arasındaki Önemli Farklar
- Otomatik Artan Kimlikler:
- MySQL:
AUTO_INCREMENT
- PostgreSQL:
SERIAL
Örnek:
CREATE TABLE Kullanici ( ID SERIAL PRIMARY KEY, Ad VARCHAR(100) );
- MySQL:
- JSON Veri Desteği:
- MySQL:
JSON
veri türü desteklenir. - PostgreSQL:
JSON
veJSONB
desteklenir (daha hızlıdır).
- MySQL:
- İndeksleme Farkları:
- PostgreSQL, GIN ve GiST indeksleri ile daha güçlü tam metin arama sunar.
- MySQL, FULLTEXT INDEX ile benzer bir tam metin arama özelliği sağlar.
- Tetikleyiciler (Triggers):
- PostgreSQL, tetikleyiciler ve saklı yordamlar konusunda daha gelişmiş yeteneklere sahiptir.
- MySQL’de tetikleyiciler desteklenir, ancak PostgreSQL kadar esnek değildir.
MySQL ve PostgreSQL, ilişkisel veritabanı yönetim sistemlerinde en çok kullanılan iki platformdur. MySQL daha hızlı ve daha hafif yapısıyla web tabanlı projelerde yaygın olarak kullanılırken, PostgreSQL güçlü veri yapıları, JSONB desteği ve daha gelişmiş indeksleme mekanizmaları ile büyük ölçekli uygulamalar için daha uygun olabilir.
Yorum gönder