Birincil anahtarlar oluşturma. Kısıtlama PRIMARY KEY Birincil anahtar sözdizimi

Bu yazıda anahtarlarla ilgili her şeyi dikkate almaya çalışacağız. SQL: Anahtarların oluşturulması ve sınırlandırılması ne içindir? Genel olarak: sıkıcı olacak 😉

Bugünün planı şöyle:

İlişkisel veritabanı teorisinde - anahtarlar Bunlar, veritabanı tablolarındaki verilerin bütünlüğünü ve kullanılabilirliğini koruyan belirli kısıtlamalar oluşturmak için oluşturulan belirli varlıklardır.

Basit bir deyişle, anahtarlar içeride SQL bir sütun için ek işlevsellik belirtmek üzere oluşturulur. İster benzersiz olsun, ister sütunun başka bir tabloya (yabancı anahtar) referans vermesi olsun.

Birincil anahtar

Veritabanında benzersiz olması gereken bir sütun, birincil anahtarla işaretlenir. Birincil anahtar veya birincil anahtar, birincil anahtar sütununun değerinin tabloda tekrarlanamayacağı anlamına gelir. Böylece bu anahtar, sütun değerinin tekrarlanacağı korkusu olmadan tablodaki bir kaydı benzersiz şekilde tanımlamanıza olanak tanır. Sadece bir örnek: Diyelim ki bir kullanıcılar tablonuz var. Bu tabloda şu alanlar bulunmaktadır: tam ad, doğum yılı, telefon. Bir kullanıcı nasıl tanımlanır? Tam ad ve telefon numarası gibi parametrelere güvenilemez. Sonuçta, yalnızca aynı soyadına sahip değil, aynı adı taşıyan birden fazla kullanıcımız olabilir. Telefon numarası zamanla değişebilir ve telefon numarasına sahip olan kullanıcı veri tabanımızdaki kişi olmayabilir.

Birincil anahtarın icat edilmesinin nedeni budur. Bir kez benzersiz bir tanımlayıcı atandı ve hepsi bu. İÇİNDE mySql Sahadaki tüm örnekleri gerçekleştirdiğimiz örnekte OTOMATİK ARTIŞ bunun birincil anahtar olduğunu belirtmediğiniz sürece ayarlanamaz.

Kayıt oluştururken birincil anahtar olarak işaretlenen bir alanın boş olamayacağını belirtmeye gerek yok diye düşünüyorum.

Harici anahtar ( yabancı anahtar)

Biraz daha var mı harici anahtar (yabancı anahtar). Buna referans da denir. Tabloları birbirine bağlamak gerekir.

Yukarıdaki görsele baktığınızda yabancı anahtar ayakkabı tablosundaki tedarikçi alanı olacaktır. Genellikle bir tablo oluştururken benzersiz tamsayı değerlerinden oluşan bir sütun belirtirsiniz. Tabloyu oluşturduğumuzda bunu nasıl yaptık? Tedarikçi

Kolon tedarikçi kimliği her giriş için benzersiz olacaktır. Değeri sütunda görünecek Sağlayıcı masada ayakkabı. Hemen yabancı anahtarın nasıl oluşturulduğuna dair bir örneğe bakmanızı öneririm.

Yabancı anahtar oluşturma

tablo ayakkabıları oluştur(shoes_id int auto_increment birincil anahtar, başlık metni, boyut int, fiyat değişkenliği, sayım int, varchar(30), tedarikçi int, yabancı anahtar (tedarikçi) referans tedarikçisine (supplier_id));

Yukarıdaki örnekte görebileceğiniz gibi yabancı anahtar oluşturmanın sözdizimi oldukça basittir. Tabloya bir alan eklemeniz ve ardından bu alanı yabancı anahtar olarak bildirmeniz ve nereye başvuracağını belirtmeniz gerekir. Bu durumda alan Tedarikçi alana atıfta bulunacak tedarikçi kimliği masada Tedarikçi

Bileşik anahtar (bileşik anahtar)

Bileşik anahtara gelince, bunlar bir tablodaki birkaç birincil anahtardır. Böylece yaratılmış bileşik anahtar, kaydın benzersizliği bu anahtarda birleştirilen alanlar tarafından kontrol edilecektir.

Bir tabloya ekleme yaparken, aynı anda birkaç alanı kullanarak bir kaydın benzersizliğini kontrol etmeniz gereken durumlar vardır. Bu nedenle bileşik anahtar icat edildi. Örneğin, basit bir tablo oluşturacağım. bileşik anahtar sözdizimini göstermek için:

Tablo oluştur test(field_1 int, field_2 text, field_3 bigint, birincil anahtar (field_1, field_3));

Yukarıdaki örnekte iki alan bileşik anahtarda birleştirilmiştir ve tabloda bu aynı alanlara sahip hiçbir kayıt olmayacaktır.

Anahtarlarla ilgili her şey bu SQL. Bu küçük eğitim, tabloların tek bir veritabanı oluşturacak şekilde nasıl birleştirileceğini ayrıntılı olarak inceleyeceğimiz makaleye bir hazırlık niteliğindedir.

ŞUNLAR İÇİN GEÇERLİDİR: SQL Server (2016'dan beri)Azure SQL DatabaseAzure SQL Veri AmbarıParalel Veri Ambarı

SQL Server Management Studio veya Transact-SQL'i kullanarak SQL Server 2016'da birincil anahtar tanımlayabilirsiniz. Birincil anahtar oluşturmak, otomatik olarak karşılık gelen benzersiz bir kümelenmiş veya kümelenmemiş dizin oluşturur.

Bu bölümde

    Başlamadan önce aşağıdaki adımları tamamlayın.

    Kısıtlamalar

    Emniyet

    Aşağıdakileri kullanarak bir birincil anahtar oluşturun:

    SQL Server Yönetim Stüdyosu

Kısıtlamalar

    Bir tablonun yalnızca bir birincil anahtar kısıtlaması olabilir.

    PRIMARY KEY kısıtlamasına sahip tüm sütunlar NULL DEĞİLDİR. Eğer null değeri belirtilmezse, PRIMARY KEY kısıtlamasına sahip tüm sütunlar için NOT NULL bayrağı ayarlanır.

Emniyet

İzinler

Birincil anahtarla yeni bir tablo oluşturmak, veritabanında CREATE TABLE iznini ve tablonun oluşturulduğu şemada ALTER iznini gerektirir.

Mevcut bir tabloda birincil anahtar oluşturmak, tabloda ALTER iznini gerektirir.

Birincil Anahtar Oluşturma

    Nesne Gezgini'nde benzersiz kısıtlama eklemek istediğiniz tabloya sağ tıklayın ve Oluşturucu.

    İÇİNDE Masa tasarımcısı Birincil anahtar olarak tanımlamak istediğiniz veritabanı sütununun satır seçicisine tıklayın. Birden fazla sütun seçmek için CTRL tuşunu basılı tutun ve kalan sütunların satır seçicilerine tıklayın.

    Sütun Satırı Seçicisine sağ tıklayın ve Birincil anahtarı ayarla.

Anahtar kaynağı sütunu, karşılık gelen satır seçicideki birincil anahtar sembolüyle tanımlanır.

Birincil anahtar birden fazla sütundan oluşuyorsa, bir sütunda yinelenen değerler olabilir, ancak birincil anahtarın tüm sütunlarındaki tüm değer kombinasyonları benzersiz olmalıdır.

Bileşik anahtar tanımladığınızda birincil anahtardaki sütunların sırası tabloda gösterilen sütunların sırası ile aynıdır. Ancak birincil anahtar oluşturulduktan sonra sütunların sırası değiştirilebilir. Daha fazla bilgi için bakınız .

Mevcut bir tabloda birincil anahtar oluşturma

    İÇİNDE Nesne Gezgini

    Bir istek oluştur.

    Uygulamak. Bu örnek, TransactionID sütununda bir birincil anahtar oluşturur.

    AdventureWorks2012'Yİ KULLANIN; GİTMEK ALTER TABLE Production.TransactionHistoryArchive ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID BİRİNCİL ANAHTAR KÜMELENMİŞ (TransactionID); GİTMEK

Yeni bir tabloda birincil anahtar oluşturma

    İÇİNDE Nesne Gezgini Veritabanı Motorunun bir örneğine bağlanın.

    Standart panelde öğesini seçin Bir istek oluştur.

    Aşağıdaki örneği sorgu penceresine kopyalayın ve düğmeye tıklayın Uygulamak. Bu örnek bir tablo oluşturur ve TransactionID sütunu için bir birincil anahtar tanımlar.

    AdventureWorks2012'Yİ KULLANIN; GİTMEK CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int NULL DEĞİL, CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID)); GİTMEK

    Daha fazla bilgi için ve bölümlerine bakın.

Dikkatinize Yeni Başlayanlar için SQL makalesinin 2. Kısmının ücretsiz çevirisini sunuyorum

Her web geliştiricisinin veritabanlarıyla etkileşime girebilmesi önemlidir. İkinci bölümde dili öğrenmeye devam ediyoruz SQL ve becerilerimizi DBMS'ye uygulayın MySQL. Dizinleri, veri türlerini ve daha karmaşık sorguları inceleyeceğiz.

Neye ihtiyacın var

Lütfen yer alan ilk bölümün "Neye ihtiyacınız var" bölümüne bakın.

Bu örnekleri sunucunuzda çalıştırmak istiyorsanız aşağıdakileri yapın:

  1. Konsolunuzu açın MySQL ve oturum açın.
  2. Sorguyu kullanarak "my_first_db" veritabanını oluşturun YARATMAK Daha önce oluşturulmadıysa.
  3. Operatörü kullanarak baz istasyonunu değiştirin KULLANMAK.

Dizinler

Dizinler (veya anahtarlar), verileri seçen ifadelerin (örneğin, SEÇME) tablolardan.

İyi bir veritabanı mimarisinin önemli bir parçasıdırlar; bunları "optimizasyon" olarak sınıflandırmak zordur. Genellikle dizinler başlangıçta eklenir, ancak daha sonra bir sorgu kullanılarak eklenebilir TABLOYU DEĞİŞTİR.

Veritabanı sütunlarını indekslemenin ana nedenleri şunlardır:

  • Hemen hemen her tablonun bir birincil anahtarı vardır ( BİRİNCİL ANAHTAR), genellikle bu "id" sütunudur.
  • Bir sütunun benzersiz değerleri depolaması amaçlanıyorsa benzersiz bir dizine sahip olması gerekir ( EŞSİZ).
  • Bir sütunda sık sık arama yapmanız gerekiyorsa (cümle içinde kullanmak) NEREDE), düzenli bir dizine sahip olmalıdır ( DİZİN).
  • Bir sütun başka bir tabloyla ilişki kurmak için kullanılıyorsa mümkünse yabancı anahtar olmalıdır ( YABANCI ANAHTAR) veya normal bir dizin.

Birincil anahtar (Birincil Anahtar)

Hemen hemen tüm tabloların birincil anahtarı vardır; genellikle otomatik artış seçeneği olan bir tam sayıdır ( AUTO_INCREMET).

Alt sorgular genellikle önemli performans düşüşüne neden olur; bu nedenle bunları dikkatli kullanın.

UNION: Verileri birleştirme

Sorgu kullanma BİRLİK birden fazla SELECT sorgusunun sonuçlarını birleştirebilirsiniz.

Bu örnek, "N" harfiyle başlayan eyaletleri daha büyük nüfusa sahip eyaletlerle birleştirir:

(SELECT * FROM, WHERE adının LIKE "n%" olduğunu belirtir) UNION (SELECT * FROM, WHERE popülasyonunun > 10000000 olduğunu belirtir);

New York'un büyük bir eyalet olduğunu ve "N" harfiyle başladığını lütfen unutmayın. Ancak listede yalnızca bir kez görünür çünkü kopyalar otomatik olarak kaldırılır.

Ayrıca isteklerin güzelliği BİRLİK farklı tablolardaki sorguları birleştirmek için kullanılabilecekleridir.

Örneğin, çalışanlarımız (çalışanlar), yöneticilerimiz (yöneticilerimiz) ve müşterilerimiz (müşterilerimiz) var. Her tablonun e-posta adresini içeren bir alanı vardır. Tüm E-posta adreslerini tek bir istekte almak istiyorsak aşağıdakileri yapabiliriz:

(Çalışanlardan e-posta SEÇİN) UNION (yöneticilerden e-posta SEÇİN) UNION (abone olduğunuz müşterilerden e-posta SEÇİN = 1);

Bu talebi tamamladığınızda, tüm çalışanların ve yöneticilerin ve yalnızca posta listesine abone olan müşterilerin posta adreslerini alacağız.

EKLEYİN Devamı

Talep hakkında zaten konuştuk SOKMAKönceki makalede. Artık indekslere baktığımıza göre ek sorgulama yeteneklerinden bahsedebiliriz. SOKMAK.

EKLEYİN... YİNELENEN ANAHTAR GÜNCELLEMESİNDE

Bu en sık kullanılan durumdur. İlk önce istek yürütülmeye çalışır SOKMAK ve istek yinelenen bir birincil nedeniyle başarısız olursa ( BİRİNCİL ANAHTAR) veya benzersiz ( BENZERSİZ ANAHTARI) tuşuna bastığınızda istek yürütülür GÜNCELLEME.

Öncelikle bir test tablosu oluşturalım.

Bu bir yiyecek saklama masası. "Stok" alanı stokta bulunan ürün sayısını saklar.

Şimdi mevcut bir değeri tabloya eklemeyi deneyelim ve ne olacağını görelim.

Bir hata aldık.

Diyelim ki yeni bir fırınımız var ve veritabanını güncellemek istiyoruz ancak veritabanında halihazırda bir giriş olup olmadığını bilmiyoruz. Önce kaydın varlığını kontrol edip ardından başka bir ekleme sorgusu çalıştırabiliriz. Veya her şeyi basit bir sorguyla yapabilirsiniz:

Aynı şekilde çalışır SOKMAK, ancak önemli bir özelliği var. Kayıt zaten mevcutsa silinir ve ardından sorgu yürütülür. SOKMAK ve herhangi bir hata mesajı almayacağız.

Lütfen dikkat edin, çünkü tamamen yeni bir satır eklenir, otomatik artış alanı bir artırılır.

Bu, uygulamanın çalışır durumda kalmasını sağlamak için ilk etapta çoğaltma hatalarının oluşmasını önlemenin bir yoludur. Çoğaltma olsa bile hata yazdırmadan yeni bir satır eklemeniz gerekebilir.

Hiçbir hata veya güncellenmiş satır yok.

Veri tipleri

Tablodaki her sütunun belirli bir türde olması gerekir. Türleri zaten kullandık Dahili, VARCHAR Ve TARİH ancak bunlar üzerinde ayrıntılı olarak durmadı. Ayrıca birkaç veri türüne daha bakacağız.

Sayısal veri türleriyle başlayalım. Bunları iki gruba ayırıyorum: Tamsayılar ve kesirler.

Tüm

Bir tamsayı sütunu yalnızca doğal sayıları saklayabilir (ondalık nokta yok). Varsayılan olarak pozitif veya negatif olabilirler. Seçenek seçilirse İMZASIZ, bu durumda yalnızca pozitif sayılar saklanabilir.

MySQL, farklı boyutlarda ve aralıklarda 5 tür tamsayıyı destekler:

Kesirli sayısal veri türleri

Bu türler kesirli sayıları saklayabilir: FLOAT, DOUBLE ve DECIMAL.

FLOAT 4 bayt, DOUBLE ise 8 bayt alır ve öncekine benzer. ÇİFT daha doğrudur.

DECIMAL(M,N) değişken hassasiyete sahiptir. M maksimum basamak sayısıdır, N ise virgülden sonraki basamak sayısıdır.

Örneğin, DECIMAL(13,4) 9 ondalık basamağa ve 4 ondalık basamağa sahiptir.

Dize veri türleri

Dizeleri saklayabileceklerini adından tahmin edebilirsiniz.

CHAR(N) N karakter saklayabilir ve sabit bir değere sahiptir. Örneğin, CHAR(50) her zaman sütunun tamamındaki satır başına 50 karakter içermelidir. Mümkün olan maksimum değer 255 karakterdir

VARCHAR(N) aynı şekilde çalışır ancak aralık değişebilir. N - maksimum değeri belirtir. Saklanan dize N karakterden kısaysa, sabit sürücüde daha az yer kaplar. Mümkün olan maksimum değer 65535 karakterdir.

TEXT türünün çeşitleri uzun dizeler için daha uygundur. TEXT'in 65535 karakter sınırı, MEDIUMTEXT'in 16,7 milyon karakter sınırı ve LONGTEXT'in 4,3 milyar karakter sınırı vardır. MySQL genellikle bunları sunucudaki ayrı depolarda saklar, böylece ana depolama mümkün olduğu kadar küçük ve hızlı olur.

.

Çözüm

Makaleyi okuduğunuz için teşekkür ederiz. SQL, bir web geliştiricisinin cephaneliğindeki önemli bir dil ve araçtır.

Birincil Anahtar, bir veritabanı tablosundaki her satırı/kaydı benzersiz şekilde tanımlayan, tablodaki bir alandır. Birincil anahtarlar benzersiz değerler içermelidir. Birincil anahtar sütununun bir değeri olamaz.

Bir tablonun yalnızca bir veya daha fazla alandan oluşabilen bir birincil anahtarı olabilir. Birden fazla alan birincil anahtar olarak kullanıldığında bunlara bileşik anahtar adı verilir.

Bir tablonun herhangi bir alanda tanımlanmış bir birincil anahtarı varsa, o alan(lar) için aynı değere sahip iki kaydınız olamaz.

Not– Veritabanı tabloları oluştururken bu kavramları kullanabilirsiniz.

Birincil Anahtar Oluşturma

Kimlik özelliğini Müşteriler tablosunda birincil anahtar olarak tanımlamaya yönelik söz dizimi aşağıda verilmiştir.

MÜŞTERİ TABLOSU OLUŞTURUN(ID INT NULL DEĞİL, İSİM VARCHAR (20) NULL DEĞİL, AGE INT NULL DEĞİL, ADRES CHAR (25) , MAAŞ ONDALIK (18, 2), BİRİNCİL ANAHTAR (ID));

CUSTOMERS tablosu zaten mevcut olduğunda "ID" sütununda birincil anahtar kısıtlaması oluşturmak için aşağıdaki SQL sözdizimini kullanın:

ALTER TABLE MÜŞTERİLERİ BİRİNCİL ANAHTARI (ID) EKLEYİN;

Not

Birincil anahtar eklemek için ALTER TABLE deyimini kullanırsanız, birincil anahtar sütununun/sütunlarının NULL değerleri içermediği zaten bildirilmiş olmalıdır (tablo ilk önce oluşturulduysa).

Birden fazla sütunda birincil anahtar tanımlamak için aşağıdaki SQL sözdizimini kullanın:

MÜŞTERİ TABLOSU OLUŞTURUN(ID INT NULL DEĞİL, İSİM VARCHAR (20) NULL DEĞİL, AGE INT NULL DEĞİL, ADRES CHAR (25) , MAAŞ ONDALIK (18, 2), BİRİNCİL ANAHTAR (ID, İSİM));

CUSTOMERS tablosu zaten mevcut olduğunda ID ve NAME sütunlarında birincil anahtar kısıtlaması oluşturmak için aşağıdaki SQL sözdizimini kullanın.

ALTER TABLE MÜŞTERİLER KISITLAMA PK_CUSTID BİRİNCİL ANAHTARI (ID, NAME) EKLEYİN;

Birincil anahtarı silme

Aşağıda verilen sözdizimini kullanarak bir tablodan birincil anahtar kısıtlamalarını temizleyebilirsiniz.

ALTER TABLO MÜŞTERİLERİ BİRİNCİL ANAHTARI BIRAKIR;

Veritabanı tasarım süreci sırasında, veritabanına hangi tabloların dahil edilmesi gerektiği, bunların hangi adlara sahip olacağı (tanımlayıcılar), tabloları oluşturmak için ne tür verilere ihtiyaç duyulacağı ve bunların her birine hangi kullanıcıların erişebileceği hakkında kararlar alınır. . Ayrıca etkili bir şekilde tablo oluşturmak için aşağıdaki soruları yanıtlamanız gerekir:

  • Tabloların her birini hangi tür ve boyutta sütunlar oluşturacak ve tablo sütunları için hangi adları seçmelisiniz?
  • Hangi sütunlar NULL değeri içerebilir?
  • Kullanılacaklar mı? bütünlük kısıtlamaları, sütunlar için varsayılan değerler ve kurallar?
  • Sütunların indekslenmesi gerekli mi, belirli sütunlara ne tür indeksler uygulanacak?
  • Birincil ve yabancı anahtarlara hangi sütunların dahil edileceği.

MS SQL Server ortamında tablolar oluşturmak için şu komutu kullanın:

<определение_таблицы>::= CREATE TABLE [ veritabanı_adı.[sahip]. | mal sahibi. ]Tablo ismi (<элемент_таблицы>[,...N])

<элемент_таблицы> ::= {<определение_столбца>} | <имя_столбца>GİBİ<выражение> | <ограничение_таблицы>

Genellikle bir tablonun (dbo) sahibi onu oluşturan kişidir.

<Выражение>değerini ayarlar hesaplanan sütun. Hesaplanan Sütunlar- bunlar sanal sütunlardır, yani tabloda fiziksel olarak saklanmazlar ve aynı tablonun sütunlarının değerleri kullanılarak hesaplanırlar. için ifadede hesaplanan sütun bir veya daha fazla işleç tarafından bağlanan normal sütun adları, sabitler ve işlevler olabilir. Alt sorgular böyle bir ifadeye katılamaz. Hesaplanan Sütunlar Sorgu sonucunda döndürülecek sütunların listesini belirtirken SELECT yan tümcesine dahil edilebilir. Hesaplanan Sütunlar yabancı anahtara dahil edilemez, bunlar için varsayılan değerler kullanılmaz. Ayrıca, hesaplanan sütunlar INSERT ve DELETE işlemlerine katılamaz.

<определение_столбца>::= ( sütun_adı<тип_данных>) [ [ VARSAYILAN<выражение>] | [ KİMLİK (başlangıç, adım) ]]] [<ограничение_столбца>][...N]]

Sütun tanımında ilgili sütunun olacağını belirten IDENTITY parametresine dikkat edin. sayaç sütunu. Her tablo için bu özelliğe sahip yalnızca bir sütun tanımlanabilir. Ayrıca başlangıç ​​değerini ve artış adımını da belirleyebilirsiniz. Bu değerler belirtilmezse her ikisi de varsayılan olarak 1 olur. IDENTITY anahtar sözcüğüyle NOT FOR REPLICATION belirtilirse sunucu o sütun için otomatik olarak değer üretmeyecek, ancak isteğe bağlı değerlerin eklenmesine izin verecektir. sütun.

Kullanılan kısıtlamalar şunlardır: sütun kısıtlamaları Ve tablo kısıtlamaları. Aralarındaki fark şudur sütun kısıtlaması yalnızca belirli bir alan için geçerlidir ve tablo kısıtlaması- bir veya daha fazla alandan oluşan gruplara.

<ограничение_столбца>::= [ CONSTRAINT kısıtlamaadı ] ( [ NULL | NOT NULL ] | [ (PRIMARY KEY | UNIQUE ) [ KÜMELENMİŞ | KÜMELENMEMİŞ ] [ FILLFACTOR=doldurma faktörü İLE ] [ ON (dosya grubu adı | VARSAYILAN ) ] ] ] | [ [ YABANCI ANAHTAR ] REFERANSLAR tablo_genus_adı [(sütun_adı_tablo_genus) ] [ SİLİNMEDE (KASKAT | EYLEM YOK ) ] [ GÜNCELLEMEDE (KASKAT | EYLEM YOK ) ] [ ÇOĞALTMA İÇİN DEĞİL ]] | KONTROL EDİN [ ÇOĞALTMA İÇİN DEĞİL ](<лог_выражение>) } <ограничение_таблицы>::= ( [ (Birincil ANAHTAR | EŞSİZ ) [ KÜMELENMİŞ | KÜMELENMEMİŞ ] ((sütun_adı [,...n])) ] |YABANCI ANAHTAR[(sütun_adı [,...n])] REFERANSLAR tablo_adı [(sütun_adı tablo_gen [ ,...n])] [ SİLİNMEDE ( KADEMELİ | EYLEM YOK ) ] [ GÜNCELLEMEDE ( KADEMELİ | EYLEM YOK ) ] | ÇOĞALTMA İÇİN DEĞİL ] | KONTROL EDİN [ ÇOĞALTMA İÇİN DEĞİL ] (mantıksal ifade) )

Sunulan tasarımların kısıtlamalarla ilişkili bireysel parametrelerini ele alalım veri bütünlüğü. Dürüstlük Kısıtlamaları tetikleyicilere, kurallara ve varsayılanlara göre önceliklidir. İLE bütünlük kısıtlamaları ilgili olmak birincil anahtar kısıtlaması BİRİNCİL ANAHTAR yabancı anahtar kısıtlaması FOREIGN KEY, UNIQUE kısıtlaması, NULL kısıtlaması, CHECK kısıtlaması.

Birincil anahtar kısıtlaması (PRIMARY KEY)

Bir tabloda genellikle değerleri tablodaki her satırı benzersiz şekilde tanımlayan bir sütun veya sütun kombinasyonu bulunur. Bu sütuna (veya sütunlara) denir birincil anahtar Tablonun bütünlüğünü sağlamak için gereklidir. Birincil anahtar birden fazla sütun içeriyorsa, bir sütundaki değerler çoğaltılabilir, ancak tüm sütunların değerlerinin herhangi bir kombinasyonu birincil anahtar eşsiz olmalı.

Oluştururken birincil anahtar SQL Server, birincil anahtarın parçası olan sütunlarda otomatik olarak benzersiz bir dizin oluşturur. Kullanıldığında bu sütunların veri erişimini hızlandırır birincil anahtar isteklerde.

Bir tabloda yalnızca bir PRIMARY KEY kısıtlaması olabilir ve birincil anahtarda yer alan sütunların hiçbiri NULL olamaz. olarak kullanmaya çalışırken birincil anahtar sütun (veya sütun grubu) için birincil anahtar kısıtlamaları yürütülmezse, birincil anahtar oluşturulmayacak ve sistem bir hata mesajı görüntüleyecektir.

PRIMARY KEY kısıtlaması verilerin benzersiz olmasını sağladığından, genellikle şu şekilde tanımlanır: sayaç sütunları. Yaratılış bütünlük kısıtlamaları BİRİNCİL ANAHTAR hem oluşturma sırasında hem de masayı değiştirmek. Randevulardan biri birincil anahtar hüküm bilgi tutarlılığıçeşitli tablolardan veriler. Doğal olarak bu ancak diğer tablolarda karşılık gelen yabancı anahtarların tanımlanmasıyla gerçekleştirilebilir.

YABANCI ANAHTAR KISITLAMASI

Yabancı anahtar kısıtlaması sürdürmenin ana mekanizmasıdır bilgi tutarlılığı ilişkisel bir veritabanındaki tablolar arasında. FOREIGN KEY parametresinde yabancı anahtar olarak belirtilen bir alt tablo sütunu, içinde bulunan bir üst tablo sütununa başvuruda bulunmak için kullanılır birincil anahtar. Ana tablo adı ve sütunları birincil anahtar REFERENCES yan tümcesinde belirtilmiştir. Yabancı anahtar olarak tanımlanan sütunlardaki veriler yalnızca kendisiyle ilişkili sütunlardaki verilerle aynı değerlere sahip olabilir birincil anahtar ebeveyn masası. Alt ve üst tabloları birbirine bağlamak için sütun adlarının eşleşmesi gerekli değildir. Birincil anahtar tek isimli bir sütun üzerinde tanımlanabilirken, FOREIGN KEY kısıtlamasına tabi olan bir sütun tamamen farklı bir isme sahip olabilir. Tek gereksinim, sütunların veri türü ve boyutuyla eşleşmesidir.

Birincil anahtara yalnızca diğer tablolardaki sütunlar tarafından değil, aynı zamanda birincil anahtarın kendisiyle aynı tabloda bulunan sütunlar tarafından da başvurulabilir; bu, özyinelemeli yapılar oluşturmanıza olanak tanır.

Yabancı bir anahtar yalnızca aşağıdakilerle ilişkilendirilemez: birincil anahtar başka bir masa. İkinci tablonun UNIQUE sütunları veya diğer sütunlar için tanımlanabilir, ancak tabloların aynı veritabanında olması gerekir.

Yabancı anahtar sütunları NULL değeri içerebilir, ancak FOREIGN KEY kısıtlama kontrolü göz ardı edilir. Yabancı anahtar indekslenebilir, ardından sunucu gerekli verileri daha hızlı bulacaktır. Yabancı anahtar hem oluşturma sırasında hem de masaları değiştirmek.

Sınırlama bilgi tutarlılığı Alt tablodaki her kayıt için ana tabloda da bir kaydın olması gerekliliğini belirtir. Bu durumda, bir alt kaydın varlığında üst tablonun kaydındaki ilişki sütununun değerinin değiştirilmesi ve ayrıca varsayılan olarak garanti edilen üst kaydın silinmesi (basamaklı değişiklik ve silme yasağı) engellenir. SİLMEDE EYLEM YOK ve GÜNCELLEMEDE EYLEM YOK parametreleri. Basamaklı efektleri etkinleştirmek için ON DELETE CASCADE ve ON UPDATE CASCADE parametrelerini kullanın.