İç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ı: INSERT İşlemleri

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

    ## MySQL'de INSERT İşlemleri

    MySQL'de `INSERT` komutu, veritabanı tablolarına yeni veri eklemek için kullanılır. Bu bölümde, `INSERT` komutunun farklı kullanım senaryolarını ve ipuçlarını inceleyeceğiz.

    ### 1. **Temel INSERT İşlemi**

    Temel bir `INSERT` komutu, belirli bir tabloya yeni bir satır ekler. Sütun adları ve eklenen değerler belirtilir.

    **Örnek Kullanım:**
    ```sql
    INSERT INTO `table_name` (`field_one`, `field_two`) 
    VALUES ('value_one', 'value_two');
    ```

    Bu örnekte, `table_name` tablosuna `field_one` ve `field_two` sütunlarına sırasıyla `value_one` ve `value_two` değerleri eklenir.

    ### 2. **Çoklu Satır Ekleme**

    Tek bir `INSERT` komutu ile birden fazla satır eklemek mümkündür. Bu, özellikle büyük veri setlerinde performansı artırır.

    **Örnek Kullanım:**
    ```sql
    INSERT INTO `my_table` (`field_1`, `field_2`) 
    VALUES 
    ('data_1', 'data_2'),
    ('data_1', 'data_3'),
    ('data_4', 'data_5');
    ```

    Bu sorgu, `my_table` tablosuna üç yeni satır ekler. Her bir satır için `field_1` ve `field_2` sütunlarına farklı değerler atanır.

    ### 3. **INSERT IGNORE ile Hataları Yoksayma**

    `INSERT IGNORE` komutu, eğer eklenmeye çalışılan satır bir kısıtlama ihlali (örneğin, benzersiz anahtar ihlali) nedeniyle hata alırsa, bu hatayı yoksayar ve diğer satırları eklemeye devam eder.

    **Örnek Kullanım:**
    ```sql
    INSERT IGNORE INTO `people` (`id`, `name`) 
    VALUES 
    (2, 'anna'),  -- Bu satır, id=2 zaten var olduğu için yoksayılır
    (3, 'mike');  -- Bu satır eklenecektir
    ```

    Bu sorgu, `people` tablosuna iki yeni satır eklemeye çalışır. Eğer `id=2` zaten varsa, bu satır yoksayılır ve `id=3` eklenir.

    ### 4. **ON DUPLICATE KEY UPDATE ile Güncelleme**

    `ON DUPLICATE KEY UPDATE` ifadesi, eğer eklenmeye çalışılan satır bir benzersiz anahtar ihlali nedeniyle hata alırsa, bu satırı günceller.

    **Örnek Kullanım:**
    ```sql
    INSERT INTO `table_name` (`index_field`, `other_field_1`, `other_field_2`) 
    VALUES 
    ('index_value', 'insert_value', 'other_value') 
    ON DUPLICATE KEY UPDATE 
    `other_field_1` = 'update_value', 
    `other_field_2` = VALUES(`other_field_2`);
    ```

    Bu sorgu, `table_name` tablosuna yeni bir satır eklemeye çalışır. Eğer `index_field` zaten varsa, `other_field_1` güncellenir ve `other_field_2` orijinal değerini korur.

    ### 5. **AUTO_INCREMENT ve LAST_INSERT_ID()**

    `AUTO_INCREMENT` sütunu olan bir tabloya veri eklendiğinde, yeni eklenen satırın `AUTO_INCREMENT` değerini almak için `LAST_INSERT_ID()` fonksiyonu kullanılır.

    **Örnek Kullanım:**
    ```sql
    CREATE TABLE t (
       id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL,
       this VARCHAR(50),
       that VARCHAR(50),
       PRIMARY KEY(id)
    );

    INSERT INTO t (this, that) VALUES ('value1', 'value2');
    SELECT LAST_INSERT_ID() INTO @id;
    INSERT INTO another_table (t_id, other_field) VALUES (@id, 'other_value');
    ```

    Bu örnekte, `t` tablosuna yeni bir satır eklenir ve `LAST_INSERT_ID()` ile yeni eklenen satırın `id` değeri alınır. Bu değer daha sonra `another_table` tablosuna eklenir.

    ### 6. **INSERT SELECT ile Başka Tablodan Veri Ekleme**

    `INSERT SELECT` komutu, bir tablodan seçilen verileri başka bir tabloya eklemek için kullanılır.

    **Örnek Kullanım:**
    ```sql
    INSERT INTO `tableA` (`field_one`, `field_two`) 
    SELECT `tableB`.`field_one`, `tableB`.`field_two`
    FROM `tableB`
    WHERE `tableB`.clm <> 'someValue'
    ORDER BY `tableB`.sorting_clmn;
    ```

    Bu sorgu, `tableB` tablosundan seçilen verileri `tableA` tablosuna ekler. `WHERE` ve `ORDER BY` ifadeleri ile filtreleme ve sıralama yapılabilir.

    ### 7. **AUTO_INCREMENT ID'lerinin Kaybı**

    Bazı durumlarda, `INSERT` işlemleri sırasında `AUTO_INCREMENT` değerleri "yanabilir" (kaybolabilir). Bu, özellikle `INSERT IGNORE` veya `REPLACE` gibi komutlar kullanıldığında gerçekleşebilir.

    **Örnek Kullanım:**
    ```sql
    CREATE TABLE Burn (
       id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL,
       name VARCHAR(99) NOT NULL,
       PRIMARY KEY(id),
       UNIQUE(name)
    ) ENGINE=InnoDB;

    INSERT IGNORE INTO Burn (name) VALUES ('first'), ('second');
    SELECT LAST_INSERT_ID(); -- 1
    SELECT * FROM Burn ORDER BY id;

    INSERT IGNORE INTO Burn (name) VALUES ('second'); -- id=3 yanar
    SELECT LAST_INSERT_ID(); -- Hala "1"
    SELECT * FROM Burn ORDER BY id;

    INSERT IGNORE INTO Burn (name) VALUES ('third');
    SELECT LAST_INSERT_ID(); -- Şimdi "4"
    SELECT * FROM Burn ORDER BY id; -- id=3 atlandı
    ```

    Bu örnekte, `INSERT IGNORE` kullanıldığında bazı `AUTO_INCREMENT` değerleri kaybolur (yanar). Bu durum, özellikle büyük veri setlerinde dikkate alınmalıdır.

    ---

    Bu bilgilerle, MySQL'de `INSERT` komutunun farklı kullanım senaryolarını ve ipuçlarını daha iyi anlayabilirsiniz. 

    Önceki Yazı
    SQL Notları: UPDATE ve DELETE İşlemleri

    MySQL'de `UPDATE` ve `DELETE` komutlarının farklı kullanım senaryolarını v...

    Sonraki Yazı
    SQL Notları: Değişkenler ve Satır Numaralandırma

    MySQL'de değişkenlerin nasıl kullanıldığını ve satır numaralandırma i�...