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 | Örnekler | Kullanım Alanı |
|---|---|---|
| İlişkisel (RDBMS) | MySQL, PostgreSQL, Oracle | Yapılandırılmış veri, ACID |
| NoSQL - Belge | MongoDB, CouchDB | Esnek şema, JSON |
| NoSQL - Key-Value | Redis, Memcached | Cache, session |
| NoSQL - Graph | Neo4j, ArangoDB | İlişki ağları |
| NoSQL - Column | Cassandra, HBase | Büyük veri, time-series |
ACID Özellikleri
| Özellik | Açıklama |
|---|---|
| Atomicity | İşlem ya tamamen yapılır ya hiç yapılmaz |
| Consistency | Veri tutarlılığı korunur |
| Isolation | İşlemler birbirinden bağımsızdır |
| Durability | Tamamlanan 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
| Özellik | MySQL | PostgreSQL | MariaDB |
|---|---|---|---|
| Lisans | GPL/Commercial | BSD | GPL |
| JSON | ✅ | ✅ (daha iyi) | ✅ |
| Replikasyon | ✅ | ✅ | ✅ |
| Cluster | NDB | Citus | Galera |
| Öğrenme | Kolay | Orta | Kolay |
3. MySQL Kurulumu
Ubuntu/Debian
Terminal
$ apt update && apt install mysql-server -yRHEL/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 mysql4. MySQL Güvenlik Yapılandırması
Güvenli Kurulum
Terminal
$ mysql_secure_installationBu 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 -p5. 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
| Tip | Boyut | Aralık |
|---|---|---|
TINYINT | 1 byte | -128 ile 127 |
INT | 4 byte | ±2.1 milyar |
BIGINT | 8 byte | Çok büyük |
DECIMAL(M,D) | Değişken | Hassas ondalık |
FLOAT | 4 byte | Yaklaşık ondalık |
Metin Tipleri
| Tip | Max Boyut | Kullanım |
|---|---|---|
CHAR(N) | 255 | Sabit uzunluk |
VARCHAR(N) | 65,535 | Değişken uzunluk |
TEXT | 65,535 | Uzun metin |
LONGTEXT | 4GB | Çok uzun metin |
Tarih/Zaman Tipleri
| Tip | Format | Örnek |
|---|---|---|
DATE | YYYY-MM-DD | 2025-01-15 |
TIME | HH:MM:SS | 14:30:00 |
DATETIME | YYYY-MM-DD HH:MM:SS | 2025-01-15 14:30:00 |
TIMESTAMP | Unix timestamp | Auto-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.