logo
eng-flag

MySQL Notları ve İpuçları

İçindekiler

  1. MySQL Temelleri
  2. Veri Türleri
  3. Veritabanı İşlemleri
  4. Tablo İşlemleri
  5. Veri Manipülasyonu
  6. Veri Sorgulama
  7. Joinler
  8. Fonksiyonlar
  9. İndeksler
  10. Görünümler
  11. Stored Procedures (Saklı Yordamlar)
  12. Triggerlar
  13. İşlemler
  14. Kullanıcı Yönetimi
  15. Yedekleme ve Geri Yükleme
  16. Performans Optimizasyonu
  17. MySQL'e Özgü Özellikler

MySQL Temelleri

MySQL'e Bağlanma

mysql -u kullanıcı_adı -p

Veritabanlarını Göster

SHOW DATABASES;

Veritabanı Seç

USE veritabani_adı;

Tablo Göster

SHOW TABLES;

Tablo Yapısını Göster

DESCRIBE tablo_adı;

Veri Türleri

Sayısal Türler

  • INT, BIGINT, SMALLINT, TINYINT
  • DECIMAL(M,D), NUMERIC(M,D)
  • FLOAT, DOUBLE

Karakter Türleri

  • CHAR(M)
  • VARCHAR(M)
  • TEXT, MEDIUMTEXT, LONGTEXT

Tarih ve Saat Türleri

  • DATE
  • TIME
  • DATETIME
  • TIMESTAMP

Diğer Türler

  • ENUM
  • SET
  • BOOLEAN (TINYINT(1))
  • JSON (MySQL 5.7.8+)

Veritabanı İşlemleri

Veritabanı Oluştur

CREATE DATABASE veritabani_adı;

Veritabanını Sil

DROP DATABASE veritabani_adı;

Tablo İşlemleri

Tablo Oluştur

CREATE TABLE calisanlar (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ilk_ad VARCHAR(50),
    soyad VARCHAR(50),
    email VARCHAR(100) UNIQUE,
    işe_alım_tarihi DATE,
    maaş DECIMAL(10, 2)
);

Tabloyu Değiştir

-- Sütun Ekle
ALTER TABLE calisanlar ADD COLUMN departman VARCHAR(50);

-- Sütun Değiştir
ALTER TABLE calisanlar MODIFY COLUMN departman VARCHAR(100);

-- Sütun Sil
ALTER TABLE calisanlar DROP COLUMN departman;

Tabloyu Sil

DROP TABLE calisanlar;

Veri Manipülasyonu

Veri Ekle

INSERT INTO calisanlar (ilk_ad, soyad, email, işe_alım_tarihi, maaş)
VALUES ('John', 'Doe', 'john@example.com', '2023-01-15', 50000.00);

Veriyi Güncelle

UPDATE calisanlar
SET maaş = 55000.00
WHERE id = 1;

Veriyi Sil

DELETE FROM calisanlar
WHERE id = 1;

Veri Sorgulama

Temel SELECT

SELECT * FROM calisanlar;

SELECT ilk_ad, soyad, maaş
FROM calisanlar
WHERE maaş > 50000
ORDER BY soyad ASC;

LIMIT ve OFFSET

SELECT * FROM calisanlar
LIMIT 10 OFFSET 20;

LIKE ile Desen Eşleşmesi

SELECT * FROM calisanlar
WHERE soyad LIKE 'S%';

IN Operatörü

SELECT * FROM calisanlar
WHERE departman_id IN (1, 2, 3);

BETWEEN Operatörü

SELECT * FROM calisanlar
WHERE maaş BETWEEN 40000 AND 60000;

Joinler

INNER JOIN

SELECT e.ilk_ad, e.soyad, d.departman_adı
FROM calisanlar e
INNER JOIN departmanlar d ON e.departman_id = d.id;

LEFT JOIN

SELECT e.ilk_ad, e.soyad, d.departman_adı
FROM calisanlar e
LEFT JOIN departmanlar d ON e.departman_id = d.id;

RIGHT JOIN

SELECT e.ilk_ad, e.soyad, d.departman_adı
FROM calisanlar e
RIGHT JOIN departmanlar d ON e.departman_id = d.id;

Fonksiyonlar

Agregat Fonksiyonlar

SELECT 
    COUNT(*) as toplam_calisan,
    AVG(maaş) as ortalama_maaş,
    MAX(maaş) as en_yüksek_maaş,
    MIN(maaş) as en_düşük_maaş,
    SUM(maaş) as toplam_maaş
FROM calisanlar;

Karakter Fonksiyonları

SELECT 
    CONCAT(ilk_ad, ' ', soyad) as tam_ad,
    UPPER(soyad) as büyük_harfli_soyad,
    LENGTH(ilk_ad) as ad_uzunluğu
FROM calisanlar;

Tarih Fonksiyonları

SELECT 
    ilk_ad,
    işe_alım_tarihi,
    YEAR(işe_alım_tarihi) as işe_alım_yılı,
    DATEDIFF(CURDATE(), işe_alım_tarihi) as işe_alım_günleri
FROM calisanlar;

İndeksler

İndeks Oluştur

CREATE INDEX idx_soyad ON calisanlar (soyad);

Benzersiz İndeks Oluştur

CREATE UNIQUE INDEX idx_email ON calisanlar (email);

İndeksi Sil

DROP INDEX idx_soyad ON calisanlar;

Görünümler

Görünüm Oluştur

CREATE VIEW yüksek_maaşlı_calisanlar AS
SELECT ilk_ad, soyad, maaş
FROM calisanlar
WHERE maaş > 60000;

Görünümü Sorgula

SELECT * FROM yüksek_maaşlı_calisanlar;

Stored Procedures (Saklı Yordamlar)

Saklı Yordam Oluştur

DELIMITER //
CREATE PROCEDURE DepartmanBazındaCalisanlar(IN dept_id INT)
BEGIN
    SELECT * FROM calisanlar
    WHERE departman_id = dept_id;
END //
DELIMITER ;

Saklı Yordam Çağır

CALL DepartmanBazındaCalisanlar(1);

Triggerlar

Trigger Oluştur

DELIMITER //
CREATE TRIGGER before_employee_update
BEFORE UPDATE ON calisanlar
FOR EACH ROW
BEGIN
    SET NEW.son_değişiklik = NOW();
END //
DELIMITER ;

İşlemler

İşlem Örneği

START TRANSACTION;

UPDATE hesaplar SET bakiye = bakiye - 100 WHERE id = 1;
UPDATE hesaplar SET bakiye = bakiye + 100 WHERE id = 2;

COMMIT;
-- Veya hata varsa ROLLBACK;

Kullanıcı Yönetimi

Kullanıcı Oluştur

CREATE USER 'yeni_kullanıcı'@'localhost' IDENTIFIED BY 'şifre';

Yetki Ver

GRANT ALL PRIVILEGES ON veritabani_adı.* TO 'yeni_kullanıcı'@'localhost';
FLUSH PRIVILEGES;
``## Kullanıcı Yönetimi

### Kullanıcı Oluştur
```sql
CREATE USER 'yeni_kullanıcı'@'localhost' IDENTIFIED BY 'şifre';

Yetki Ver

GRANT ALL PRIVILEGES ON veritabani_adı.* TO 'yeni_kullanıcı'@'localhost';
FLUSH PRIVILEGES;

Yetkileri Geri Al

REVOKE ALL PRIVILEGES ON veritabani_adı.* FROM 'yeni_kullanıcı'@'localhost';

Yedekleme ve Geri Yükleme

Veritabanını Yedekle

mysqldump -u kullanıcı_adı -p veritabani_adı > yedek.sql

Veritabanını Geri Yükle

mysql -u kullanıcı_adı -p veritabani_adı < yedek.sql

Performans Optimizasyonu

EXPLAIN İfadesi

EXPLAIN SELECT * FROM calisanlar WHERE soyad = 'Smith';

Tabloyu Optimize Et

OPTIMIZE TABLE calisanlar;

İşlem Listesini Göster

SHOW PROCESSLIST;

MySQL'e Özgü Özellikler

Tam Metin Arama

CREATE FULLTEXT INDEX ft_idx ON makaleler (baslik, icerik);

SELECT * FROM makaleler
WHERE MATCH (baslik, icerik) AGAINST ('anahtar_kelime' IN NATURAL LANGUAGE MODE);

ROLLUP ile GROUP BY

SELECT departman, is_unvanı, SUM(maas)
FROM calisanlar
GROUP BY departman, is_unvanı WITH ROLLUP;

Tekrar Eden Anahtar ile Güncelle

INSERT INTO calisanlar (id, ad, soyad, maas)
VALUES (1, 'John', 'Doe', 50000)
ON DUPLICATE KEY UPDATE maas = maas + 1000;

2024 © Tüm hakları saklıdır - buraxta.com