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