PhpMyAdmin Üzerinden Veritabanı Yedeği Alma
SQL Nedir?
cPanel 'de Subdomain (Alt Etki Alanı) Kök Dizinde Oluşturma

SQL Nedir?

SQL, günümüzde veritabanı yönetimi için temel araçlardan biri olmuştur. “Structured Query Language”ın kısaltması olan SQL, ilişkisel veritabanlarındaki verilerle etkileşimde bulunmak, sorgulamak ve yönetmek için kullanılan bir programlama dilidir. Bu yazıda, SQL’in temel prensiplerinden başlayarak, işlevselliğini, avantajlarını ve günlük kullanım örneklerini keşfedeceğiz.

SQL’in Temel Prensipleri

a. Veritabanı Oluşturma ve Yönetme: SQL, veritabanları oluşturmak ve yönetmek için kullanılır. CREATE DATABASE komutu ile yeni bir veritabanı oluşturabilir, ardından CREATE TABLE ile tabloları tanımlayabilirsiniz.

b. Veri Ekleme, Güncelleme ve Silme: INSERT, UPDATE ve DELETE komutları ile SQL, veritabanındaki verilerle etkileşime geçer. Bu komutlar, veri eklemek, güncellemek veya silmek için kullanılır.

c. Veritabanı Sorgulama: SELECT komutu, veritabanından veri çekmek için kullanılır. WHERE koşulları ekleyerek veriyi filtreleyebilir, GROUP BY ile gruplandırabilir ve ORDER BY ile sıralayabilirsiniz.

SQL Temel Komutları

a. SELECT İfadeleri:

  • SQL’de SELECT komutu, veritabanından veri çekmek için kullanılır. Temel bir kullanım şu şekildedir:
SELECT column1, column2, ...
FROM table_name
WHERE condition;

Örnek 1: Tüm sütunları çekme;

SELECT * FROM customers;

Örnek 2: Belirli sütunları çekme;

SELECT customer_id, first_name, last_name FROM customers;

Örnek 3: WHERE koşulu ile filtreleme;

SELECT product_name, price FROM products WHERE price > 50;

b. DML Komutları:

DML (Data Manipulation Language) komutları, veritabanındaki verilerle etkileşimde bulunmak için kullanılır.

INSERT Komutu:

  • INSERT komutu, veritabanına yeni veri eklemek için kullanılır. Bir tabloya yeni bir kayıt eklemek amacıyla kullanılır.
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

Örnek: Bir müşteri eklemek;

INSERT INTO customers (first_name, last_name, email)
VALUES ('John', 'Doe', 'john.doe@example.com');

UPDATE Komutu:

  • UPDATE komutu, var olan veriyi güncellemek için kullanılır. Belirli bir koşula uyan kayıtları güncellemek amacıyla kullanılır.
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

Örnek: Bir ürünün stok miktarını güncellemek;

UPDATE products
SET stock_quantity = 100
WHERE product_id = 1;

DELETE Komutu:

  • DELETE komutu, veritabanındaki veriyi silmek için kullanılır. Belirli bir koşula uyan kayıtları silmek amacıyla kullanılır.
DELETE FROM table_name
WHERE condition;

Örnek: Bir müşteriyi silmek;

DELETE FROM customers
WHERE customer_id = 1001;

SQL Fonksiyonları

a. Matematiksel Fonksiyonlar:

  • SUM(): Belirli bir sütundaki değerlerin toplamını hesaplar.
SELECT SUM(price) AS total_price FROM products;
  • AVG(): Belirli bir sütundaki değerlerin ortalamasını hesaplar.
SELECT AVG(salary) AS average_salary FROM employees;
  • MIN() ve MAX(): Sırasıyla belirli bir sütundaki en küçük ve en büyük değerleri bulur.
SELECT MIN(stock_quantity) AS min_stock FROM products;
SELECT MAX(stock_quantity) AS max_stock FROM products;

b. Metin İşleme Fonksiyonları:

  • CONCAT(): İki veya daha fazla dizeyi birleştirir.
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
  • SUBSTRING(): Belirli bir dizeden bir alt dize alır.
SELECT SUBSTRING(product_name, 1, 5) AS short_name FROM products;
  • LENGTH(): Bir dizenin uzunluğunu hesaplar.
SELECT LENGTH(product_name) AS name_length FROM products;
  • UPPER() ve LOWER(): Sırasıyla bir dizedeki harfleri büyük veya küçük harfe dönüştürür.
SELECT UPPER(first_name) AS upper_name FROM employees;
SELECT LOWER(last_name) AS lower_name FROM employees;

c. Diğer Fonksiyonlar:

  • NOW(): Geçerli tarih ve saat bilgisini alır.
SELECT NOW() AS current_datetime;
  • COUNT(): Belirli bir sütundaki toplam satır sayısını hesaplar.
SELECT COUNT(customer_id) AS total_customers FROM customers;
  • GROUP BY: Belirli bir sütuna göre gruplama yapar ve grup bazında işlemler yapmanıza olanak tanır.
SELECT category, AVG(price) AS avg_price FROM products GROUP BY category;

Bu örnekler, SQL fonksiyonlarının çeşitli kullanımlarını göstermektedir. SQL sorgularınızı oluştururken, ihtiyaçlarınıza uygun fonksiyonları seçmek için veritabanınızın gereksinimlerini göz önünde bulundurmalısınız.

SQL ve Web Geliştirme

a. Veritabanı İlişkisi:

Web geliştirmenin temelinde veritabanları, kullanıcıların etkileşimde bulunduğu içerik ve verileri depolar. SQL, bu veritabanlarının yönetimi ve sorgulanması için kullanılır.

b. Veritabanı Bağlantısı:

Web uygulamaları, SQL ile etkileşimde bulunabilmek için veritabanına bağlantı kurmalıdır. Bu bağlantı genellikle programlama dilleri aracılığıyla gerçekleştirilir. Örneğin, PHP’de MySQL veritabanına bağlantı kurma işlemi şu şekildedir:

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";

// MySQL ile bağlantı oluştur
$conn = new mysqli($servername, $username, $password, $dbname);

// Hata kontrolü
if ($conn->connect_error) {
    die("Bağlantı hatası: " . $conn->connect_error);
}

c. SQL ve Dinamik İçerik Oluşturma:

Web uygulamaları genellikle kullanıcıya özelleştirilmiş ve dinamik içerik sunar. Bu içerik, SQL sorguları aracılığıyla veritabanından çekilir ve web sayfasına entegre edilir.

// Örneğin: Kullanıcının favori ürünlerini getir
$user_id = 123;
$sql = "SELECT product_name FROM favorite_products WHERE user_id = $user_id";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "Favori Ürün: " . $row["product_name"]. "<br>";
    }
} else {
    echo "Hiç favori ürün yok.";
}

d. ORM (Object-Relational Mapping):

ORM, SQL sorgularını daha programlama diline özgü nesnelerle eşleştiren bir yaklaşımdır. Bu, veritabanı işlemlerini daha soyut ve programlanabilir hale getirir. Örneğin, Python’da SQLAlchemy gibi ORM kütüphaneleri kullanılabilir.

# Örneğin: SQLAlchemy ile favori ürünleri getir
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import declarative_base, Session, relationship

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    favorite_products = relationship("Product", back_populates="user")

class Product(Base):
    __tablename__ = 'products'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    user_id = Column(Integer, ForeignKey('users.id'))
    user = relationship("User", back_populates="favorite_products")

# Favori ürünleri getirme
user = session.query(User).filter_by(id=123).first()
if user:
    for product in user.favorite_products:
        print("Favori Ürün:", product.name)
else:
    print("Hiç favori ürün yok.")

e. Güvenlik ve SQL Injection:

SQL Injection saldırıları, web uygulamalarında sıkça karşılaşılan bir güvenlik sorunudur. Bu nedenle, kullanıcı girişleri ve SQL sorgularını oluştururken parametreli sorgular ve veri doğrulama gibi güvenlik önlemleri alınmalıdır.

// SQL Injection'a karşı güvenli sorgu kullanımı
$user_input = $_POST['user_input'];
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $user_input);
$stmt->execute();
$result = $stmt->get_result();

// Diğer SQL sorgu işlemleri...

Bu örnekler, SQL’in web geliştirmedeki rolünü anlamanıza yardımcı olmalıdır. Her bir programlama dili ve teknoloji farklı olabilir, bu nedenle projenizin gereksinimlerine göre uygun olanı seçmek önemlidir.

SQL ve Güvenlik

a. SQL Injection Nedir?

SQL Injection, kötü niyetli kullanıcıların, web uygulamalarına kötü amaçlı SQL sorguları göndererek veritabanına erişim sağlama girişimidir. Bu saldırı türü, kullanıcı giriş alanlarına veya URL parametrelerine eklenen kötü amaçlı SQL kodları aracılığıyla gerçekleştirilebilir.

b. SQL Injection’a Karşı Korunma Yöntemleri:

  • Parametreli Sorgular: SQL sorgularını oluştururken kullanıcı girişlerini doğrudan içermek yerine parametreli sorgular kullanmak, SQL Injection saldırılarını engellemenin etkili bir yoludur.
    Örnek (PHP ile):
$username = $_POST['username'];
$password = $_POST['password'];

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();
  • Giriş Doğrulama ve Veri Temizleme: Kullanıcı girişlerini almadan önce veri temizleme işlemleri yapmak, potansiyel olarak zararlı karakterleri temizleyerek güvenlik sağlar.
    Örnek (Python ile):
import re

def clean_input(user_input):
    # Sadece harf ve rakamları kabul etmek
    return re.sub(r'[^a-zA-Z0-9]', '', user_input)

username = clean_input(request.form['username'])
  • Veritabanı Yetkilendirmesi: Veritabanı kullanıcı hesaplarını ve bu hesapların sadece gerekli yetkilere sahip olmasını sağlamak önemlidir. En aza indirgenmiş yetkilerle çalışmak, olası güvenlik tehditlerini azaltabilir.

c. Transaksiyon ve ACID Özellikleri:

  • Transaksiyon Kontrolü: Veritabanındaki değişiklikleri bir araya getirerek transaksiyon kontrolü kullanmak, işlemlerin başarısız olması durumunda geri alma (ROLLBACK) yaparak veri bütünlüğünü korur.
    Örnek:
BEGIN TRANSACTION;

-- SQL İşlemleri

COMMIT; -- veya ROLLBACK;
  • ACID Özellikleri: ACID (Atomicity, Consistency, Isolation, Durability), bir veritabanı işlemi için dört temel özelliği ifade eder. Bu özellikler, veritabanındaki güvenilirliği artırır.
    • Atomicity (Atomiklik): Bir transaksiyon ya tam olarak gerçekleşir ya da hiç gerçekleşmez.
    • Consistency (Tutarlılık): Bir transaksiyon sonrasında veritabanı tutarlı bir durumda olmalıdır.
    • Isolation (İzolasyon): Her transaksiyonun diğerleriyle bağımsız çalışmasını sağlar.
    • Durability (Kalıcılık): Bir transaksiyonun tamamlandığında, yapılan değişiklikler kalıcı olmalıdır.

Bu güvenlik önlemleri, SQL kullanımında sıkça karşılaşılan güvenlik sorunlarına karşı koruma sağlar. Ancak, güvenlik konusundaki en güncel bilgileri ve en iyi uygulamaları takip etmek her zaman önemlidir.