Veritabanı Temelleri

Veritabanı kavramları, MySQL mimarisi ve kurulum

Kubedo Academy’e hoş geldiniz! Bu laboratuvarda veritabanı temellerini, MySQL kurulumunu ve temel SQL sorgularını öğreneceksiniz.


Zorluk seviyesi: Başlangıç
Süre: Yaklaşık 45 dakika


1. Veritabanı Nedir?

Veritabanı, yapılandırılmış verileri organize şekilde saklayan ve yöneten bir sistemdir.

Veritabanı Türleri

TürÖrneklerKullanım Alanı
İlişkisel (RDBMS)MySQL, PostgreSQL, OracleYapılandırılmış veri, ACID
NoSQL - BelgeMongoDB, CouchDBEsnek şema, JSON
NoSQL - Key-ValueRedis, MemcachedCache, session
NoSQL - GraphNeo4j, ArangoDBİlişki ağları
NoSQL - ColumnCassandra, HBaseBüyük veri, time-series

ACID Özellikleri

ÖzellikAçıklama
Atomicityİşlem ya tamamen yapılır ya hiç yapılmaz
ConsistencyVeri tutarlılığı korunur
Isolationİşlemler birbirinden bağımsızdır
DurabilityTamamlanan işlemler kalıcıdır

2. MySQL Nedir?

MySQL, dünyanın en popüler açık kaynak ilişkisel veritabanı yönetim sistemidir.

MySQL Özellikleri

  • Açık Kaynak: GPL lisansı (Community Edition)
  • Hızlı: Yüksek performanslı okuma/yazma
  • Güvenilir: ACID desteği, replikasyon
  • Ölçeklenebilir: Clustering, sharding
  • Cross-platform: Linux, Windows, macOS

MySQL vs Diğerleri

ÖzellikMySQLPostgreSQLMariaDB
LisansGPL/CommercialBSDGPL
JSON✅ (daha iyi)
Replikasyon
ClusterNDBCitusGalera
ÖğrenmeKolayOrtaKolay

3. MySQL Kurulumu

Ubuntu/Debian

Terminal
$ apt update && apt install mysql-server -y

RHEL/CentOS

yum install mysql-server -y
systemctl start mysqld
systemctl enable mysqld

Docker ile

docker run -d \
  --name mysql \
  -e MYSQL_ROOT_PASSWORD=secret123 \
  -p 3306:3306 \
  mysql:8.0

Kurulum Doğrulama

Terminal
$ mysql --version
systemctl status mysql

4. MySQL Güvenlik Yapılandırması

Güvenli Kurulum

Terminal
$ mysql_secure_installation

Bu komut:

  • Root şifresi ayarlar
  • Anonim kullanıcıları siler
  • Root uzaktan erişimini kısıtlar
  • Test veritabanını siler

MySQL’e Bağlanma

Terminal
$ mysql -u root -p

5. Temel SQL Komutları

Veritabanı İşlemleri

Terminal
$ SHOW DATABASES;
CREATE DATABASE kubedo;
USE kubedo;
DROP DATABASE test;

Tablo Oluşturma

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    is_active BOOLEAN DEFAULT TRUE
);

Tablo Bilgisi

Terminal
$ SHOW TABLES;
DESCRIBE users;
SHOW CREATE TABLE users;

6. CRUD İşlemleri

INSERT - Veri Ekleme

INSERT INTO users (username, email, password) 
VALUES ('senol', 'senol@kubedo.com', 'hash123');

INSERT INTO users (username, email, password) VALUES
('ali', 'ali@example.com', 'hash456'),
('veli', 'veli@example.com', 'hash789');

SELECT - Veri Okuma

-- Tüm veriler
SELECT * FROM users;

-- Belirli kolonlar
SELECT username, email FROM users;

-- Koşullu sorgu
SELECT * FROM users WHERE is_active = TRUE;

-- Sıralama
SELECT * FROM users ORDER BY created_at DESC;

-- Limit
SELECT * FROM users LIMIT 10;

UPDATE - Veri Güncelleme

UPDATE users 
SET email = 'yeni@email.com' 
WHERE username = 'senol';

UPDATE users 
SET is_active = FALSE 
WHERE created_at < '2024-01-01';

DELETE - Veri Silme

DELETE FROM users WHERE id = 5;

DELETE FROM users WHERE is_active = FALSE;

[!CAUTION] DELETE ve UPDATE komutlarında WHERE kullanmayı unutmayın! Aksi halde tüm veriler etkilenir.


7. Veri Tipleri

Sayısal Tipler

TipBoyutAralık
TINYINT1 byte-128 ile 127
INT4 byte±2.1 milyar
BIGINT8 byteÇok büyük
DECIMAL(M,D)DeğişkenHassas ondalık
FLOAT4 byteYaklaşık ondalık

Metin Tipleri

TipMax BoyutKullanım
CHAR(N)255Sabit uzunluk
VARCHAR(N)65,535Değişken uzunluk
TEXT65,535Uzun metin
LONGTEXT4GBÇok uzun metin

Tarih/Zaman Tipleri

TipFormatÖrnek
DATEYYYY-MM-DD2025-01-15
TIMEHH:MM:SS14:30:00
DATETIMEYYYY-MM-DD HH:MM:SS2025-01-15 14:30:00
TIMESTAMPUnix timestampAuto-update özelliği

8. Indexler

Index, sorgu performansını artırır.

Index Oluşturma

-- Tekil index
CREATE INDEX idx_username ON users(username);

-- Unique index
CREATE UNIQUE INDEX idx_email ON users(email);

-- Composite index
CREATE INDEX idx_active_created ON users(is_active, created_at);

Index Görüntüleme

Terminal
$ SHOW INDEX FROM users;

EXPLAIN ile Sorgu Analizi

EXPLAIN SELECT * FROM users WHERE username = 'senol';

[!TIP] WHERE, JOIN ve ORDER BY’da sık kullanılan kolonlara index ekleyin.


Konu Tekrarı - Kısa Sınav


Sonraki Adım

MySQL Yönetimi →