# önder online
Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri Yapay zekâ ve otomasyonun güvenliğe etkileri Microsoft 365 ve Active Directory güvenlik rehberleri Yazılım geliştirmede güvenlik odaklı yaklaşımlar Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri

Menu

SQL Notları: INSERT İşlemleri

SQL Notları: INSERT İşlemleri

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

## 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.