İçindekiler

    Yazıyı Dinle

    Hazır
    Tarayıcınızın yerleşik ses sentezi özelliğini kullanır.

    Yazı Boyutu

    Küçük Aa
    Normal Aa
    Büyük Aa
    Çok Büyük Aa

    Kaydet

    📑

    Bu makaleyi daha sonra okumak için kaydedin

    SQL Notları: Veri Türleri ve Depolama

    Yazıyı dinlemek için oynat butonuna tıklayın

    ## Veri Türleri ve Depolama

    MySQL, farklı türde verileri depolamak için çeşitli veri türleri sunar. Bu veri türleri, verilerin nasıl saklanacağını ve işleneceğini belirler. İşte MySQL'de sıkça kullanılan bazı veri türleri:

    ### 1. **CHAR(n) ve VARCHAR(n)**

    - **CHAR(n)**: Sabit uzunlukta bir string türüdür. `n` karakter uzunluğunda bir alan kaplar. Örneğin, `CHAR(10)` olarak tanımlanan bir sütun, 10 karakterlik bir alan kaplar, içeriği ne olursa olsun.
    - **VARCHAR(n)**: Değişken uzunlukta bir string türüdür. `n` karaktere kadar veri depolayabilir, ancak yalnızca kullanılan kadar alan kaplar. Örneğin, `VARCHAR(100)` olarak tanımlanan bir sütun, 100 karaktere kadar veri depolayabilir, ancak yalnızca girilen karakter kadar alan kaplar.

    **Örnek Kullanım:**
    ```sql
    CREATE TABLE users (
       username VARCHAR(50),
       country_code CHAR(2) CHARACTER SET ascii
    );
    ```

    ### 2. **DATE, DATETIME, TIMESTAMP, YEAR ve TIME**

    - **DATE**: Yalnızca tarih bilgisini depolar. Formatı `YYYY-MM-DD` şeklindedir.
    - **DATETIME**: Tarih ve saat bilgisini depolar. Formatı `YYYY-MM-DD HH:MM:SS` şeklindedir.
    - **TIMESTAMP**: Tarih ve saat bilgisini depolar, ancak Unix zaman damgası olarak saklar. Formatı `YYYY-MM-DD HH:MM:SS` şeklindedir, ancak aralığı 1970'ten 2038'e kadardır.
    - **YEAR**: Yalnızca yıl bilgisini depolar. 1901 ile 2155 arasındaki yılları destekler.
    - **TIME**: Yalnızca saat bilgisini depolar. Formatı `HH:MM:SS` şeklindedir.

    **Örnek Kullanım:**
    ```sql
    CREATE TABLE events (
       event_name VARCHAR(100),
       event_date DATE,
       event_time TIME
    );
    ```

    ### 3. **INT, FLOAT, DOUBLE ve DECIMAL**

    - **INT**: Tam sayı değerlerini depolar. Boyutuna göre `TINYINT`, `SMALLINT`, `MEDIUMINT`, `INT` ve `BIGINT` gibi türleri vardır.
    - **FLOAT ve DOUBLE**: Yaklaşık ondalık sayı değerlerini depolar. `FLOAT` 4 byte, `DOUBLE` ise 8 byte yer kaplar.
    - **DECIMAL**: Kesin ondalık sayı değerlerini depolar. Para gibi kesinlik gerektiren değerler için idealdir.

    **Örnek Kullanım:**
    ```sql
    CREATE TABLE products (
       product_id INT AUTO_INCREMENT,
       price DECIMAL(10, 2),
       weight FLOAT
    );
    ```

    ### 4. **BIT ve BLOB**

    - **BIT**: Bit değerlerini depolar. Özellikle bayrak (flag) değerleri için kullanışlıdır.
    - **BLOB**: Büyük ikili verileri (binary large objects) depolar. Örneğin, resim veya dosya gibi veriler için kullanılır.

    **Örnek Kullanım:**
    ```sql
    CREATE TABLE images (
       image_id INT AUTO_INCREMENT,
       image_data BLOB
    );
    ```

    ## Veri Türleri ve Performans

    Veri türlerini seçerken, performans ve depolama gereksinimlerini dikkate almak önemlidir. Örneğin, `VARCHAR` yerine `CHAR` kullanmak, sabit uzunluklu veriler için daha verimli olabilir. Ancak, `VARCHAR` değişken uzunluklu veriler için daha esnektir ve daha az depolama alanı kullanır.

    Ayrıca, `TEXT` türleri, büyük metin verileri için kullanışlı olsa da, karmaşık sorgularda performans sorunlarına neden olabilir. Bu nedenle, `VARCHAR` gibi daha küçük veri türleri tercih edilmelidir.

    ## Otomatik Dönüştürme (Implicit Casting)

    MySQL, bazı durumlarda veri türlerini otomatik olarak dönüştürebilir. Örneğin, bir string değeri sayısal bir işlemde kullanıldığında, MySQL bu stringi otomatik olarak sayıya dönüştürebilir:

    ```sql
    SELECT '123' * 2;  -- Sonuç: 246
    ```

    Ancak, bu tür otomatik dönüştürmeler bazen beklenmeyen sonuçlara yol açabilir. Örneğin:

    ```sql
    SELECT 'ABC123' * 2;  -- Sonuç: 0
    ```

    Bu nedenle, veri türlerini açıkça belirtmek ve otomatik dönüştürmelerden kaçınmak genellikle daha güvenlidir.

    ---

    Bu bilgilerle, MySQL'deki veri türlerini ve nasıl kullanılacağını daha iyi anlayabilirsiniz. Bir sonraki yazıda, daha gelişmiş SQL sorguları ve performans optimizasyonu konularına değineceğiz.

     

    Önceki Yazı
    SQL Notları: SELECT Sorguları ve İleri Seviye Kullanımlar

    SELECT sorgularını daha etkili bir şekilde kullanabilir ve veritabanından is...

    Sonraki Yazı
    SQL Notları: MySQL ile Başlangıç

    Bu temel bilgilerle MySQL'e başlangıç yapabilirsiniz. SQL öğrenmek, veritab...