alter_schema
Alan ve indeks eklemek, güncellemek, yeniden adlandırmak ve silmek.
alter_schema var olan bir şemayı değiştirir. Adımlar herhangi bir sırayla yazılabilir; yazıldıkları sırayla uygulanır.
alter_schema('uyeler')
.add_field({'phone': {type: string, max_length: 20, default: '-'}})
.add_index({'surname': {name: 'idx_surname'}})
.update_field({'name': {max_length: 80}, 'age': {type: int16}})
.update_index({'idx_email': {name: 'idx_eposta'}})
.commit();| Adım | Ne yapar | |
|---|---|---|
add_field({...}) / add_fields | Alan ekler; seçenekler create_schema ile aynı. | |
update_field({...}) / update_fields | Var olan alanın seçeneklerini değiştirir. | |
| `add_index({'alan': true \ | {name, unique}})` | İndeks ekler ve var olan satırlardan kurar. |
update_index({'ad': {unique, name}}) | İndeksi yeniden adlandırır ya da benzersizliğini değiştirir. | |
drop_field('ad') | Alanı siler. Alanın indeksleri de silinir. | |
drop_index('ad') | İndeksi siler. | |
commit() | Değişikliği uygular. Yoksa yalnızca doğrulanır. |
Her başarılı alter_schema şemanın sürümünü bir artırır. describe_schema -n uyeler güncel sürümü gösterir.
Var olan veri#
Var olan satırları etkileyen değişiklikler, uygulanmadan önce bütün satırlara karşı denetlenir. .commit() yazılmasa bile bu denetim yapılır.
# hata: existing row ... violates the change: name: ... max_length is 3
alter_schema('uyeler').update_field({'name': {max_length: 3}}).commit();Denetlenen değişiklikler:
max_length'i kısaltmak,nullable: falseyapmak,- yeni bir
checkeklemek, encodingdeğiştirmek,- varsayılanı olmayan zorunlu bir alan eklemek,
- indeksi
uniqueyapmak.
Yeni eklenen bir alan eski satırlarda varsayılan değeriyle okunur. Varsayılanı yoksa null okunur. Kayıtlar yeniden yazılmaz.
from('uyeler').where({'name': 'Osman'}).fields('name', 'phone').get();update_field seçenekleri#
| Seçenek | Not |
|---|---|
type | Yalnızca genişletme: int8 → int16 → int32 → int64, uint8 → … → uint64, float32 → float64, string → text, date → datetime → timestamp. |
max_length, encoding, format, nullable, default, check | create_schema ile aynı. |
index | true / {name, unique} ekler, false siler. |
rename | Alanı yeniden adlandırır. Alanın kimliği aynı kaldığı için kayıtlar yeniden yazılmaz. |
alter_schema('uyeler')
.update_field({'surname': {rename: 'soyad'}})
.commit();
from('uyeler').fields('name', 'soyad').get();Daraltan tür değişiklikleri (int64 → int8, string → int32 gibi) reddedilir. Bunun için yeni bir alan ekleyip veriyi kopyalayın.
# hata: age cannot change from int16 to string (it can widen to int32, int64)
alter_schema('uyeler').update_field({'age': {type: string}}).commit();(age bu sayfanın başında int16'ya genişletilmişti.)
Birincil anahtar, autoincrement ve guid alan oluşturulduktan sonra değiştirilemez. Birincil anahtar silinemez ve sonradan eklenemez.