SQL CREATE TABLE Nasıl Kullanılır? Örneklerle Tablo Oluşturma

SQL CREATE TABLE nasıl kullanılır sorusuna kısa yanıt: kolon adları, veri türleri ve kısıtlarla tablo tanımlarsınız. T-SQL örnekleriyle adım adım öğrenin.

Önemli not: Örnekler Microsoft SQL Server T-SQL içindir. Tabloyu doğru veritabanında ve şemada oluşturduğunuzu çalıştırmadan önce doğrulayın.

SQL CREATE TABLE nasıl kullanılır sorusunun kısa yanıtı şudur: CREATE TABLE ifadesiyle tablo adını, her kolonun adını ve veri türünü, ardından kısıtları tanımlarsınız. Microsoft SQL Server bu tanımı geçerli veritabanı ve şemada oluşturur. Aşağıdaki akış, temel sözdiziminden doğrulamaya kadar uygulanabilir bir yol izler.

Bu rehberdeki tüm örnekler T-SQL içindir. MySQL veya PostgreSQL sözdizimiyle karıştırmayın. Örneklerde uydurma kimlikler ve örnek veriler kullanılır. Üretim veritabanında çalıştırmadan önce doğru sunucu, veritabanı ve şema seçili olduğunu mutlaka kontrol edin.

Ön koşullar ve hazırlık

  • SQL Server örneğine bağlanabildiğiniz bir istemciniz olmalı; SQL Server Management Studio (SSMS) veya Azure Data Studio kullanabilirsiniz.
  • Tabloyu oluşturacağınız veritabanında nesne oluşturma izniniz bulunmalı.
  • Hedef şemayı önceden belirleyin; örneklerde dbo şeması kullanılır.
  • Çalıştırmadan önce üst araç çubuğunda doğru veritabanının seçili olduğunu doğrulayın.
  • Üretim ortamında değişiklik yapmadan önce test ortamında deneyin.

CREATE TABLE temel sözdizimi

Temel yapı şöyledir: CREATE TABLE şema.tablo (kolon adı veri türü kısıtlar, …). Parantez içindeki her satır bir kolonu tanımlar. Kolonlar virgülle ayrılır; son kolondan sonra virgül koymayın. Aşağıdaki örnek, örnek bir müşteri tablosunu oluşturur.

Temel CREATE TABLE örneği

CREATE TABLE dbo.OrnekMusteri (
    MusteriID   INT           NOT NULL,
    AdSoyad     NVARCHAR(100) NOT NULL,
    Eposta      NVARCHAR(150) NULL,
    KayitTarihi DATETIME2(0)  NOT NULL
);

Bu tanım dört kolon içerir. INT tam sayı, NVARCHAR değişken uzunlukta Unicode metin, DATETIME2 ise tarih ve saat tutar. Parantez içindeki sayılar metin uzunluğunu veya saniye hassasiyetini belirtir. Kısıtlar kolon tanımının hemen ardından gelir.

Kolon adı ve veri türü seçimi

Kolon adları açıklayıcı ve tutarlı olmalı. Boşluk yerine bitişik ad veya alt çizgi kullanın. Veri türünü, saklayacağınız gerçek değere göre seçin. Metin için NVARCHAR, tam sayı için INT veya BIGINT, para için DECIMAL, tarih için DATE ya da DATETIME2 uygundur.

  • Metin uzunluğunu gerçekçi belirleyin; gereğinden büyük NVARCHAR(MAX) kullanmaktan kaçının.
  • Para tutarlarında FLOAT yerine DECIMAL tercih edin; yuvarlama sorunlarını önler.
  • Tarih ve saat için DATETIME2 kullanın; hassasiyeti parantezle belirtin.
  • Benzersiz tanımlayıcı gerekiyorsa UNIQUEIDENTIFIER değerlendirin.
  • Kolon adlarında Türkçe karakter kullanacaksanız tutarlı bir kural belirleyin.

NULL ve NOT NULL kararı

NULL, değerin bilinmediğini veya girilmediğini gösterir. NOT NULL ise kolona mutlaka değer girilmesini zorunlu kılar. Zorunlu alanları NOT NULL yapın; isteğe bağlı alanları NULL bırakın. Bu karar, veri kalitesini doğrudan etkiler.

NULL ve NOT NULL karşılaştırması

CREATE TABLE dbo.OrnekUrun (
    UrunID    INT           IDENTITY(1,1) NOT NULL,
    UrunAdi   NVARCHAR(120) NOT NULL,
    Aciklama  NVARCHAR(400) NULL,
    Fiyat     DECIMAL(10,2) NOT NULL
);

Burada UrunAdi ve Fiyat zorunludur. Aciklama ise boş bırakılabilir. NOT NULL kolonlara değer vermeden satır eklemeye çalışırsanız SQL Server hata döndürür. Bu davranış, eksik verinin tabloya girmesini engeller.

PRIMARY KEY ve IDENTITY kullanımı

PRIMARY KEY, satırı benzersiz biçimde tanımlayan kolonu belirtir. IDENTITY ise otomatik artan sayı üretir. Genellikle birincil anahtar kolonu IDENTITY ile birlikte kullanılır. Aşağıdaki örnekte her iki yapı birlikte tanımlanır.

PRIMARY KEY ve IDENTITY

CREATE TABLE dbo.OrnekSiparis (
    SiparisID   INT           IDENTITY(1,1) NOT NULL,
    MusteriID   INT           NOT NULL,
    SiparisTarihi DATETIME2(0) NOT NULL,
    Tutar       DECIMAL(10,2) NOT NULL,
    CONSTRAINT PK_OrnekSiparis PRIMARY KEY (SiparisID)
);

IDENTITY(1,1) ilk değerin 1 olduğunu ve her satırda 1 arttığını belirtir. PRIMARY KEY kısıtına ad vermek, ileride kısıtı yönetmeyi kolaylaştırır. Bir tabloda yalnızca bir birincil anahtar tanımlanabilir.

Varsayılan ve benzersiz kısıtlar

DEFAULT kısıtı, değer girilmediğinde kullanılacak varsayılanı belirler. UNIQUE kısıtı ise bir kolonda tekrar eden değeri engeller. Aşağıdaki örnekte KayitTarihi için varsayılan değer ve Eposta için benzersizlik tanımlanır.

DEFAULT ve UNIQUE kısıtları

CREATE TABLE dbo.OrnekUye (
    UyeID       INT           IDENTITY(1,1) NOT NULL,
    Eposta      NVARCHAR(150) NOT NULL,
    KayitTarihi DATETIME2(0)  NOT NULL CONSTRAINT DF_OrnekUye_KayitTarihi DEFAULT (SYSDATETIME()),
    CONSTRAINT PK_OrnekUye PRIMARY KEY (UyeID),
    CONSTRAINT UQ_OrnekUye_Eposta UNIQUE (Eposta)
);

SYSDATETIME() çalışma anındaki tarih ve saati verir. UNIQUE kısıtı sayesinde aynı e-posta iki kez eklenemez. Kısıtlara ad vermek, hata mesajlarını okumayı ve sonradan değişiklik yapmayı kolaylaştırır.

SSMS'te çalıştırma ve sonucu doğrulama

  1. SSMS'i açın ve hedef SQL Server örneğine bağlanın.
  2. Üst araç çubuğundaki veritabanı açılır listesinden doğru veritabanını seçin.
  3. Yeni sorgu penceresi açın ve CREATE TABLE ifadenizi yazın.
  4. İfadeyi çalıştırmadan önce şema adını ve kolon tanımlarını gözden geçirin.
  5. F5 veya Çalıştır düğmesiyle sorguyu yürütün.
  6. Mesajlar sekmesinde komutun başarıyla tamamlandığını doğrulayın.
  7. Nesne Gezgini'nde ilgili veritabanı ve şema altında tabloyu bulun.
  8. Tabloya sağ tıklayıp Tasarım görünümünü açarak kolonları ve kısıtları kontrol edin.
  9. Son doğrulama için sys.columns görünümünden kolon listesini sorgulayın.

Oluşturulan tabloyu doğrulama

SELECT c.name AS KolonAdi, t.name AS VeriTuru, c.is_nullable
FROM sys.columns AS c
JOIN sys.types AS t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID('dbo.OrnekUye')
ORDER BY c.column_id;

Bu sorgu yalnızca okuma yapar ve tablo yapısını listeler. Kolon adları, veri türleri ve NULL izinleri beklentinizle eşleşmeli. Eşleşmiyorsa tabloyu düzeltmek için ALTER TABLE kullanmanız gerekir.

Var olan tabloyla çakışma ve şema hataları

Aynı şemada aynı adla tablo zaten varsa CREATE TABLE hata verir. Önce varlığı kontrol edin; koşullu oluşturma için IF NOT EXISTS kalıbını kullanabilirsiniz. Ancak bu kalıp, var olan tablonun yapısını değiştirmez; yalnızca yeniden oluşturmayı engeller.

Koşullu tablo oluşturma

IF OBJECT_ID('dbo.OrnekMusteri', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.OrnekMusteri (
        MusteriID   INT           NOT NULL,
        AdSoyad     NVARCHAR(100) NOT NULL,
        Eposta      NVARCHAR(150) NULL,
        KayitTarihi DATETIME2(0)  NOT NULL
    );
END;

Şema adını atlarsanız SQL Server varsayılan şemayı kullanır; bu da beklenmeyen yerde tablo oluşturabilir. Her zaman şema adını açıkça yazın. Ayrıca hedef şemanın veritabanında mevcut olduğundan emin olun.

Beklenen sonuç ve kontrol noktaları

  • Mesajlar sekmesinde komut başarıyla tamamlandı bilgisi görünür.
  • Nesne Gezgini'nde tablo, doğru veritabanı ve şema altında listelenir.
  • sys.columns sorgusu, tanımladığınız kolonları ve veri türlerini döndürür.
  • Birincil anahtar ve benzersiz kısıtlar sys.key_constraints görünümünde görünür.
  • Varsayılan kısıt, sys.default_constraints görünümünde listelenir.

Geri alma ve kurtarma

Yanlış tanımla oluşturduğunuz ve henüz veri içermeyen bir tabloyu kaldırmak için DROP TABLE kullanılabilir. Bu işlem geri alınamaz ve tablodaki tüm veriyi siler. Üretim ortamında önce tablonun yedeğini alın ve etkilenecek satırları SELECT ile doğrulayın.

Önce doğrula, sonra sil

-- Silinecek tablonun varlığını ve satır sayısını doğrula
SELECT COUNT(*) AS SatirSayisi FROM dbo.OrnekMusteri;

-- Yalnızca test ortamında ve doğrulama sonrası çalıştırın
-- DROP TABLE dbo.OrnekMusteri;

Tabloyu tamamen kaldırmak yerine yalnızca belirli satırları silmek istiyorsanız DELETE kullanın. Her DELETE ifadesinde WHERE koşulu bulunmalı. İşlemi BEGIN TRANSACTION içinde deneyin; doğrulama sonrası COMMIT veya ROLLBACK ile karar verin.

Transaction içinde silme denemesi

BEGIN TRANSACTION;

-- Etkilenecek satırları önce göster
SELECT MusteriID, AdSoyad FROM dbo.OrnekMusteri WHERE MusteriID = 999;

DELETE FROM dbo.OrnekMusteri WHERE MusteriID = 999;

-- Sonucu kontrol edin; uygunsa COMMIT, değilse ROLLBACK çalıştırın
-- COMMIT TRANSACTION;
-- ROLLBACK TRANSACTION;

Sık yapılan hatalar ve çözümleri

  • Aynı adla tablo zaten var: OBJECT_ID kontrolüyle varlığı doğrulayın veya farklı ad seçin.
  • Şema bulunamadı hatası: Hedef şemanın mevcut olduğunu kontrol edin; gerekirse şemayı oluşturun.
  • Veri türü uyumsuzluğu: Metin uzunluğunu ve sayısal hassasiyeti gerçek veriye göre ayarlayın.
  • NOT NULL ihlali: Zorunlu kolonlara değer verdiğinizden emin olun veya kolonu NULL yapın.
  • Benzersizlik ihlali: UNIQUE kısıtı olan kolona tekrar eden değer girmeyin.
  • Yanlış veritabanında oluşturma: Sorgu penceresinde doğru veritabanının seçili olduğunu kontrol edin.

Sık sorulan sorular

Aşağıdaki yanıtlar, tablo oluştururken en sık karşılaşılan durumları kapsar. Her yanıt T-SQL davranışına dayanır.

Sık sorulan sorular

SQL CREATE TABLE nasıl kullanılır ve en kısa örnek nedir?

CREATE TABLE şema.tablo (kolon adı veri türü kısıtlar) kalıbını kullanın. Örneğin CREATE TABLE dbo.Ornek (ID INT NOT NULL, Ad NVARCHAR(50) NOT NULL); ifadesi iki kolonlu bir tablo oluşturur.

Bir tabloda birden fazla PRIMARY KEY tanımlanabilir mi?

Hayır. Bir tabloda yalnızca bir birincil anahtar tanımlanabilir. Birden fazla kolonu benzersiz kılmak istiyorsanız bunları tek bir bileşik PRIMARY KEY içinde birleştirebilirsiniz.

IDENTITY kolonuna elle değer girebilir miyim?

Varsayılan olarak IDENTITY kolonuna değer giremezsiniz. Gerekli olduğunda SET IDENTITY_INSERT ifadesiyle bu davranış geçici olarak değiştirilebilir; ancak dikkatli kullanılmalıdır.

CREATE TABLE ifadesini transaction içine almalı mıyım?

SQL Server'da CREATE TABLE işlemsel olarak desteklenir, ancak basit tablo oluşturma için transaction zorunlu değildir. Birden fazla bağımlı nesne oluşturuyorsanız transaction kullanmak tutarlılık sağlar.

Oluşturduğum tabloyu nasıl kontrol ederim?

Nesne Gezgini'nde tabloyu bulabilir veya sys.columns görünümünü OBJECT_ID ile sorgulayabilirsiniz. Bu yöntem kolon adlarını, veri türlerini ve NULL izinlerini gösterir.

Var olan tabloya yeni kolon eklemek için ne kullanılır?

ALTER TABLE dbo.Tablo ADD KolonAdi VeriTuru ifadesini kullanın. NOT NULL kolon eklerken varsayılan değer tanımlamanız gerekebilir.

Resmî kaynaklar

Yazı gezinmesi

Mobil sürümden çık