Ekleme, güncelleme, silme
insert_one, insert_many, update ve delete; etkilenen satırları .get() ile almak.
insert_one#
Nesne biçimi önerilen yazımdır; alan adı ile değer yan yana durur:
from('uyeler').insert_one({name: 'Zeynep', surname: 'Kaya', email: 'zeynep@example.com', age: 27});Konumsal biçimde değerler önce yazılır, alan adları fields(...) ile verilir. Değer sayısı alan sayısıyla aynı olmalıdır:
from('uyeler')
.insert_one('Can', 'Demir', 'can@example.com', 40, '01.05.1986')
.fields('name', 'surname', 'email', 'age', 'birth_date')
.get();Verilmeyen alanlar şöyle doldurulur:
autoincrementalanlar bir sonraki sayıyı alır,guidalanlar yeni bir kimlik alır,defaulttanımlı alanlar varsayılan değerini alır,- diğerleri
nullolur. Alannullable: falseise hata verilir.
.get() eklenen satırları döndürür; üretilen kimlikleri görmek için kullanılır.
insert_many#
from('uyeler').insert_many([
{name: 'Ece', email: 'ece@example.com'},
{name: 'Mert', email: 'mert@example.com'}
]);Bir satır reddedilirse hiçbir satır eklenmez; hata mesajı kaçıncı satırda durulduğunu söyler.
update#
from('uyeler')
.where({'email': 'osman@example.com'})
.update({'name': 'Mehmet', 'age': 46})
.get();- Kurallar (
check,max_length, benzersizlik) yeni değerlere de uygulanır. - İndeksli bir alan değişirse indeks de güncellenir.
- Parola alanları yeniden özetlenir.
.commit()yazılabilir ama bir şey değiştirmez: her ifade zaten kendi başına kalıcıdır.
where olmadan update reddedilir; yanlışlıkla bütün tabloyu değiştirmemek için. Bütün satırları değiştirmek isteniyorsa .all() yazılmalıdır:
# hata: update without where would change every row; add .where({...}) or .all()
from('uyeler').update({'gender': 0});from('uyeler').all().update({'gender': 0});delete#
from('uyeler').where({'age': {lt: 30}}).delete().get();.get() silinen satırları döndürür. where olmadan delete de .all() ister.
Atomiklik#
Her ifade tek bir işlemdir: ya tamamen uygulanır ya hiç. Çok satırlı bir insert_many, update ya da delete ortada bir hatayla durursa hiçbir satır değişmez. Commit edilen bir ifade önce yazma günlüğüne (WAL) yazılıp diske indirilir; ani bir kapanmada geri gelir.
# hata: row 2: email: value same@example.com already exists (unique index idx_email) (nothing was inserted)
from('uyeler').insert_many([
{name: 'Bir', email: 'same@example.com'},
{name: 'İki', email: 'same@example.com'}
]);Birden fazla ifadeyi tek işlemde toplamak (begin / commit) henüz yok.