- TEMPORARY veya TEMP
Belirtilmişse tablo bir geçici tablo olarak oluşturulur. Geçici tablolar bir oturumun sonunda özdevinimli olarak silinir, bazan isteğe bağlı olarak bir hareketin sonunda da silinebilir (aşağıdaki ON COMMIT açıklamasına bakınız). şema nitelemeli ismlerle başvurulmadıkça, aynı isimle varolan kalıcı tablolar geçici tablonun varlığı durumunda o anki oturuma görünür olmazlar. Bir geçici tablo üzerinde oluşturulan indeksler de özdevinimli olarak geçici olacaktır.
İsteğe bağlı olarak,
TEMPORARY veya
TEMP'den önce
GLOBAL veya
LOCAL yazılabilir. Bu, PostgreSQL'de bir şey farkettirmez, ama yine de
Uyumluluk bölümüne bakın.
- tablo_ismi
Oluşturulacak tablonun ismi (şema nitelemeli olabilir).
- sütun_ismi
Yeni tabloda oluşturulacak bir sütunun ismi.
- veri_türü
- DEFAULT öntanımlı_ifade
DEFAULT deyimi sütun tanımının içinde görünerek sütun için bir öntanımlı veri değeri atar. Değer, bir değişken içrmeyen bir ifadedir (tablo içinde diğer sütunlara çağraz başvurulara ve altsorgulara izin verilmez). Öntanımlı ifadenin veri türü sütunun veri türü ile eşleşmelidir.
Önanımlı ifade, sütun için bir değer belirtmeyen bir veri girme işleminde sütun değeri olarak kullanılacaktır. Bir sütun için öntanımlı bir değer belirtilmezse, NULL öntanımlıdır.
- INHERITS ( ana_tablo [, ... ] )
İsteğe bağlı INHERITS deyimi, yeni bir tablonun tüm sütunlarını miras alacağı tabloların bir listesini belirtmek için kullanılır.
INHERITS kullanımı yeni çocuk tablo ile onun abeveyni olan tablo arasında kalıcı bir birliktelik oluşturur. Ebeveynler üzerindeki şema değişiklikleri normalde çocukları da etkiler ve öntanımlı olarak çocuk tablonun verisi ebeveynler tarafından paylaşılır.
Eğer aynı sütun ismi birden fazla ebeveyn tabloda mevcutsa ve bu tabloların bu sütunları veri türü bakımından eşleşmediği takdirde bir hata raporlanacaktır. Eğer böyle bir durum yoksa, yinelenen sütunlar yani tabloda tek bir sütun oluşturacak şekilde katıştırılırlar. Eğer yeni tablonun sütun isimleri listesi aynı zamanda miras alınmış bir sütun da içeriyorsa, veri türü miras alınan sütunlara benzer şekilde eşleşmeli ve sütun tanımları tek bir sütun olarak katıştırılmalıdır. Ancak, miras alınan ve yeni sütun bildirimlerinin eşdeğer kısıtla belirtmesi gerekmez: bildirimlerden toplanan tüm kısıtlar birlikte katıştırılır ve tümü yeni tabloya uygulanır. Eğer yeni tablo sütun için açıkça bir öntanımlı değer belirtiyorsa, bu öntanımlı değer, miras alınan sütun bildirimlerin gelen öntanımlıların yerine geçer. Aksi takdirde, sütun için öntanımlı değer belirten her ebeveyn aynı öntanımlı değeri belirtmelidir, yoksa bir hata raporlanacaktır.
- LIKE ana_tablo [ { INCLUDING | EXCLUDING } DEFAULTS ]
LIKE deyimi, yeni bir tabloya veri türleri ve boş olmayan kısıtları ile birlikte tüm sütun isimlerinin özdevinimli kopyalanacağı bir tablo belirtir.
INHERITS'in tersine, yeni tablo ve özgün tablo oluşturma işleminden sonra tamamen birbirlerinin kopyası olurlar. Özgün tabloda yapılacak değişiklikler yeni tabloya uygulanmayacak ve yeni tabloda özgün tablodan alınmış veri olmayacaktır.
Kopyalanan sütun tanımları için öntanımlı olan ifadeler sadece INCLUDING DEFAULTS belirtilmişse kopyalanacaktır. Öntanımlı davranış öntanımlı olan ifadelerin dışlanması ve sonuç olarak yeni tablonun tüm sütunlarının boş öntanımlılara sahip olmasıdır.
- WITH OIDS
- WITHOUT OIDS
Bu isteğe bağlı deyimler, yeni tablonun satırlarının onlara atanacak OID'lere (nesne belirteçlerine) sahip olup olmayacağını belirtmekte kullanılır. Eğer ne WITH OIDS ne de WITHOUT OIDS belirtilmişse, öntanımlı değer default_with_oids yapılandırma parametresinin değerine bağlıdır. (Eğer yeni tablo nesne belirteçlerine sahip bir tabloyu miras alıyorsa, tabloyu oluşturan cümle WITHOUT OIDS içerse bile WITH OIDS geçerli olur.)
Eğer WITHOUT OIDS belirtilmiş ve uygulanmışsa, yeni tablo nesne belirteçlerini saklamaz ve girilen her yeni satır için bir nesne belirteci atanmaz. Nesne belirteci tüketimi azalacağından ve bu suretle 32 bitlik OID sayacının başa dönmesi erteleneceğinden genelde edilen zahmete değer. Sayaç bir kere başa döndü mü, nesne belirteçlerinin artık eşsiz olmayacağı varsayılır ve bu onları nispeten daha az yararlı hale getirir. Nesne belirteçlerinin dışlanması ek olarak, her satır için 4 bayt (çoğu makinede) olmak üzere tablonun disk üzerinde kaplayacağı alanı düşürecek ve başarımı oldukça arttıracaktır.
Tablo oluşturulduktan sonra nesne belirteçlerini kaldırmak için
ALTER TABLE[alter_table(7)] kullanın.
- CONSTRAINT kısıt_ismi
Bir sütun ya da tablo kısıtı için isteğe bağlı bir isim. Belirtilmezse ismi sistem üretir.
- NOT NULL
Sütunun boş değer içeremeyeceğini belirtir.
- NULL
Sütunun boş değer içermesine izin verilir. bu öntanımlıdır.
Bu deyim, sadece standartdışı SQL veritabanlarıyla uyumluluk için vardır. Yeni uygulamalarda kullanımından vazgeçilmelidir.
-
UNIQUE ( sütun_kısıtı )
UNIQUE ( sütun_ismi [, ... ] ) ( tablo_kısıtı )
UNIQUE kısıtı, bir tablonun bir veya daha fazla sütunundan oluşan bir grubunun sadece eşsiz değerler içerebileceğini belirtir. Eşsiz tablo kısıtının davranışı, çok sayıda sütun belirtilebilmesi dışında sütun kısıtınınki ile aynıdır.
Eşsizlik kısıtının amacına uygun olarak, boş değerlerin eşit olmadıkları varsayılır.
Her eşsiz tablo kısıtı, aynı tabloda tanımlanmış diğer eşsizlik veya birincil anahtar kısıtı tarafından isimlendirilmiş sütun grubundan farklı bir sütun grubunu isimlendirmelidir. (Aksi takdirde, yalnızca, aynı kısıt iki kere listelenmiş olur.)
-
PRIMARY KEY ( sütun_kısıtı )
PRIMARY KEY ( sütun_ismi [, ... ] ) ( tablo_kısıtı )
Birincil anahtar kısıtı bir tablonun bir sütununun ya da sütunlarının sadece elsiz ve boş olmayan değerler içerebileceğini belirtir. Teknik olarak, PRIMARY KEY sadece UNIQUE ile NOT NULL deyiminin birleşimidir, fakat bir sütun grubunun birincil anahtar olarak belirtilmesi ayrıca, şema tasarımı hakkında hamveri sağlar; bir birincil anahtar uygulanmış gibi diğer tablolar, bu tablonun satırları için bir eşsiz belirteç olarak bu sütun grubuna bel bağlayayabilir.
İster sütun ister tablo kısıtı olarak belirtilsin, bir tablo için sadece bir birincil anahtar belirtilebilir.
Birincil anahtar kısıtı, aynı tabloda tanımlanmış bir eşsizlik kısıtı tarafından isimlendirilmiş diğer sütun gruplarından farklı bir sütun grubunu isimlendirmelidir.
- CHECK (ifade)
CHECK deyimi, bir veri girme veya güncelleme işlemi sonucunda yeni ya da güncellenmiş satırların sağlaması gereken bir mantıksal sonuç üreten bir ifadeyi belirtmek için kullanılır. TRUE veya UNKNOWN olarak sonuçlanan ifadeler başarılı kabul edilir. Bir veri girme veya güncelleme işleminin ürettiği bir FALSE sonucunda bir hata olağandışılığı oluşur ve bu veri girme veya güncelleme işlemi veritabanını değiştirmez. Bir tablo kısıtı içinde görünen bir ifade çok sayıda sütunun değeri ile ilgili olabilirken, bir sütun kısıtı olarak belirtilen bir sınama kısıtı sadece bu sütunun değeriyle ilgili olmalıdır.
Şimdilik, CHECK ifadeleri ne altsorgu içerebilir ne de üzerinde çalışılan satır dışındaki sütunların değerleriyle ilgili olabilir.
-
REFERENCES başvuru_tablosu [ ( başvuru_sütunu ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE eylem ] [ ON UPDATE eylem
FOREIGN KEY ( sütun_ismi [, ... ] )
REFERENCES başvuru_tablosu [ ( başvuru_sütunu [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE eylem ]
[ ON UPDATE eylem ] } ( tablo_kısıtı )
Bu deyimler, başvurulan tablonun bir satırının başvurulan sütunlarındaki değerlerle eşleşmesi gereken değerler içermesi istenen yeni tablonun bir ya da daha fazla sütunundan oluşan bir sütun grubunu gerektiren bir yabancı anahtar kısıtı belirtir. Eğer başvuru_sütunu belirtilmezse, başvuru_tablosu'nun birincil anahtarı kullanılır. Başvurulan sütunlar, başvurulan tablodaki bir eşsizlik veya bir birincil anahtar kısıtınının sütunları olmalıdır.
Bşvurulan sütunlara girilen bir değer, başvurulan tablonun ve başvurulan sütunların değerleriyle belirtilen eşleşme türü kullanılarak eşleşmelidir. Üç eşleşme türü vardır: MATCH FULL, MATCH PARTIAL ve aynı zamanda öntanımlı olan MATCH SIMPLE. MATCH FULL, tüm yabancı anahtar sütunları boş olmadıkça, bir çok sütunlu yabancı anahtarın tek sütununun boş olmasına izin vermeyecektir. MATCH SIMPLE, diğer yabancı anahtar sütunları boş değer içermezken, bazı yabancı anahtar sütunlarının boş değer içermesine izin verecektir. MATCH PARTIAL ise henüz gerçeklenmemiştir.
Ek olarak, başvurulan sütunlardaki veri değiştiğinde, bu tablonun sütunlarının verisi üzerinde bazı eylemler uygulanır. ON DELETE deyimi, başvurulan tablodaki başvurulan satır silindiğinde uygulanacak eylemi belirtmekte kullanılır. Benzer şekilde, ON UPDATE deyimi, başvurulan tablodaki başvurulan sütun yeni bir değerle güncellendiğinde uygulanacak eylemi belirtmekte kullanılır. Eğer başvurulan satır güncellenmeksizin bu sütunu içeren satır güncellenmişse, bir işlem yapılmaz. NO ACTION sınaması dışında hiçbir göreli eylem, kısıtta ertelenebileceği belirtilmiş olsa bile ertelenemez. Her deyim için olası eylemler şunlardır:
- NO ACTION
Silme veya güncelleme işlemini bir yabancı anahtar kısıtı çelişkisi ürettiğinde bunu belirten bir hatanın üretilmesini sağlar. Eğer kısıt ertelenmişse ve başvurulan satırlar hala mevcutsa, bu hata kısıtın sınanması sırasında üretilecektir. Bu öntanımlı eylemdir.
- RESTRICT
Silme veya güncelleme işlemini bir yabancı anahtar kısıtı çelişkisi ürettiğinde bunu belirten bir hatanın üretilmesini sağlar. Sınamanın ertelenebilir olmaması dışında NO ACTION'a benzer.
- CASCADE
Silinen satıra başvuran bir satırın silinmesini ya da başvuran sütunun değerinin başvurulan sütunun yeni değerine güncellenmesini sağlar.
- SET NULL
Başvuran sütunların boş olmasını sağlar.
- SET DEFAULT
Başvuran sütunlara öntanımlı değerlerinin atanmasını sağlar.
Eğer başvurulan sütunlar sıkça değişmiyorsa, yabancı anahtar sütununa bir indeks eklemek akıllıca olur, böylece yabancı anahtar sütunu ile ilgili göreli eylemler daha verimli uygulanabilir.
- DEFERRABLE
- NOT DEFERRABLE
Kısıtın ertelenip ertelenmeyeceğini belirler. Ertelenebilir olmayan (not deferrable) bir kısıt her deyimden sonra anında sınanacaktır. Ertelenebilir bir kısıt ise, SET CONSTRAINTS[set-constraints(7)] deyimi kullanılarak hareketin sonuna kadar ertelenebilir. NOT DEFERRABLE öntanımlıdır. Şimdilik sadece yabancı anahtar kısıtları bu deyimleri kabul etmektedir. Diğer tüm kısıt türleri ertelenebilir değildir.
- INITIALLY IMMEDIATE
- INITIALLY DEFERRED
Eğer bir kısıt ertelenebilirse, bu deyim kısıtın öntanımlı sınama zamanını belirtmek için kullanılabilir. Eğer kısıt INITIALLY IMMEDIATE ise, her deyimden sonra sınanacaktır. Eğer kısıt INITIALLY DEFERRED ise, sadece hareketin sonunda sınanır. Kısıtın sınama zamanı SET CONSTRAINTS[set_constraints(7)] cümlesi ile değiştirilebilir.
- ON COMMIT
Geçici tabloların hareket kümesinin sonundaki davranışı, ON COMMIT kullanılarak denetlenebilir. Üç seçeneği vardır:
- PRESERVE ROWS
Hareketin sonunda özel bir eylem yapılmaz. Bu öntanımlı davranıştır.
- DELETE ROWS
Her hareket kümesinin sonunda geçici tablonun satırları silinir. Aslında, her teslimde (commit) özdevinimli bir TRUNCATE[truncate(7)] yapılır.
- DROP
Geçici tablo o anki hareket kümesinin sonunda silinecektir.
- TABLESPACE tabloalanı
tabloalanı, yeni tablonun içinde oluşturulacağı tablo alanının ismidir. Belirtilmezse, default_tablespace yapılandırma parametresinin değeri, bu parametrenin değeri boş dizge ise veritabanının öntanımlı tablo alanı kullanılır.
- USING INDEX TABLESPACE tabloalanı
Bir UNIQUE veya PRIMARY KEY kısıtı ile ilişkili olarak oluşturulacak indeksdeki tablo alanının seçimini mümkün kılar. Belirtilmezse, default_tablespace yapılandırma parametresinin değeri, bu parametrenin değeri boş dizge ise veritabanının öntanımlı tablo alanı kullanılır.