Ana içeriğe geç
Kesit SQL
Temel · Veritabanı Tasarımı

CREATE TABLE, veri tipleri ve kısıtlar

Tablo tanımlamak; PRIMARY KEY, NOT NULL, UNIQUE, CHECK, DEFAULT, FOREIGN KEY.

Uygulamada aç, 3 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Tablo oluşturmak

Kod kutusundaki SQL türü sekmesini değiştirerek her SQL türünün veri tiplerini gör (ör. metin için SQL Server'da NVARCHAR, Oracle'da VARCHAR2).

CREATE TABLE suppliers (
  supplier_id INTEGER PRIMARY KEY,
  name        TEXT NOT NULL,
  tax_no      TEXT UNIQUE,
  city        TEXT DEFAULT 'İstanbul',
  rating      INTEGER CHECK (rating BETWEEN 1 AND 5)
);
INSERT INTO suppliers (supplier_id, name, tax_no, rating) VALUES (1, 'Ege Tekstil', '1234567890', 4);
SELECT * FROM suppliers;

Kısıtlar (constraints)

KısıtGörevi
PRIMARY KEYSatırı benzersiz tanımlar; NULL olamaz.
NOT NULLBoş bırakılamaz.
UNIQUETekrar edemez.
CHECK (koşul)Değer koşulu sağlamalı.
DEFAULT değerDeğer verilmezse kullanılır.
REFERENCES t(sutun)Yabancı anahtar: değer diğer tabloda olmalı.

Kısıtların işe yaradığını gör: aşağıdaki sorgu CHECK kuralını ihlal ettiği için hata verir. Hata mesajı seçili SQL türünün kendi mesajına benzer şekilde gösterilir.

CREATE TABLE ratings (id INTEGER PRIMARY KEY, stars INTEGER CHECK (stars BETWEEN 1 AND 5));
INSERT INTO ratings (id, stars) VALUES (1, 7);

Yabancı anahtar ve eylemler

CREATE TABLE supplier_products (
  supplier_id INTEGER REFERENCES suppliers(supplier_id) ON DELETE CASCADE,
  product_id  INTEGER REFERENCES products(product_id),
  PRIMARY KEY (supplier_id, product_id)   -- bileşik birincil anahtar
);

ON DELETE CASCADE: Tedarikçi silinince ilgili satırlar da silinir. Alternatifler: SET NULL, NO ACTION.

Otomatik artan anahtarSQL Server: INT IDENTITY(1,1) PRIMARY KEY · PostgreSQL: INTEGER GENERATED ALWAYS AS IDENTITY (eski: SERIAL) · MySQL: INT AUTO_INCREMENT PRIMARY KEY · Oracle: NUMBER GENERATED AS IDENTITY · SQLite: INTEGER PRIMARY KEY. Para için DECIMAL(12,2) kullanılır, FLOAT değil.

Sorgu sonucundan tablo üretmek de mümkündür. SQL Server'da bu iş SELECT ... INTO ile yapılır:

CREATE TABLE vip_customers AS
SELECT * FROM customers WHERE segment = 'Premium';
SELECT COUNT(*) FROM vip_customers;
Alıştırmalara geç (3)