MySQL Yabancı Anahtar Kısıtlamaları nasıl kullanılır?

How Use Mysql Foreign Key Constraints



Yabancı anahtar kısıtlaması, MySQL veritabanındaki iki tablo arasında ilişki kurmak için kullanılır. İlgili tablolarda farklı türde kısıtlamalar ayarlamak MySQL'in çok önemli bir özelliğidir. Herhangi bir tablo için herhangi bir yabancı anahtar kısıtlaması tanımlamak için başka bir tablonun birincil anahtarını kullanmanız gerekir. Birincil anahtar, bir tablonun tablodaki belirli satırı tanımlaması için benzersiz bir anahtardır ve bu birincil anahtar bire bir veya bire çoğa veya çoktan çoğa ilişki kurmak için başka bir tabloda kullanıldığında, o zaman yabancı anahtar denir. Yabancı anahtarların özellikleri ve bu anahtarların MySQL tablolarında nasıl kullanılabileceği bu makalede gösterilmiştir.

Yabancı Anahtar Kısıtlamalarının Özellikleri:

Yabancı anahtar kısıtlamasının bazı önemli özellikleri aşağıda açıklanmıştır.







  • Alt tabloda kullanılan yabancı anahtarın veri türü, yabancı anahtara başvurmak için üst tabloda kullanılan birincil anahtarın veri türü ile aynı olmalıdır.
  • Herhangi bir dizin sütununa veya birden çok sütuna yalnızca InnoDB tablosu için yabancı anahtar olarak başvurulabilir.
  • Yabancı anahtar oluşturmak için referans ayrıcalıkları veya SELECT, INSERT, UPDATE ve DELETE deyimlerinin ayrıcalıklarından en az biri gereklidir.
  • Yabancı anahtar iki şekilde oluşturulabilir. Biri CREATE deyimini, diğeri ALTER deyimini kullanarak.

Ön koşul:

Yabancı anahtar kısıtlaması oluşturmadan önce, birincil anahtarla bir veritabanı ve üst tablo oluşturmanız gerekir. Veritabanı adının 'olduğunu varsayalım. kütüphane ' ve 'adlı iki üst tablo içerir kitabın ' ve ' borçlu '. kullanarak MySQL sunucusuyla bağlantı kurun. mysql istemci ve veritabanını ve tabloları oluşturmak için aşağıdaki SQL deyimlerini çalıştırın.



OLUŞTURMAK VERİ TABANI kütüphane;
KULLANMAK kütüphane;

OLUŞTURMAK TABLO kitabın(
İD INT OLUMSUZ BOŞ OTOMATİK ARTIŞ ,
Başlık varchar (elli) OLUMSUZ BOŞ ,
yazar varchar (elli) OLUMSUZ BOŞ ,
Yayımcı varchar (elli) OLUMSUZ BOŞ ,
BİRİNCİL ANAHTAR (İD)
) MOTOR = INNODB ;

OLUŞTURMAK TABLO borçlular(
İD VARCHAR (elli) OLUMSUZ BOŞ ,
isim varchar (elli) OLUMSUZ BOŞ ,
adres varchar (elli) OLUMSUZ BOŞ ,
e-posta varchar (elli) OLUMSUZ BOŞ ,
BİRİNCİL ANAHTAR (İD)
) MOTOR = INNODB ;



CREATE deyimini kullanarak Yabancı Anahtar Kısıtlaması tanımlayın

' adlı bir tablo oluşturun book_borrow_info ' aşağıdaki ifadeyi yürüterek yabancı anahtar kısıtlamaları ile. Burada, kitap_kimliği alan bir yabancı anahtar bu tablo için ve bu alanın her değeri İD alanı kitabın tablo. kitabın ana tablodur ve book_borrow_info alt tablodur. Burada yabancı anahtarla da iki kısıtlama belirlenir. Bunlar SİL KASKAD ve GÜNCELLEME KASKAD . Bu, herhangi bir birincil anahtarın ana tablodan kaldırılması veya güncellenmesi durumunda, yabancı anahtarla ilgili alt tabloyla ilgili ilgili kayıtların kaldırılacağı veya yabancı anahtarın güncelleneceği anlamına gelir.





OLUŞTURMAK TABLO book_borrow_info(
ödünç_kimlik VARCHAR (elli),
kitap_kimliği INT ,
ödünç_tarihi TARİH OLUMSUZ BOŞ ,
dönüş tarihi TARİH OLUMSUZ BOŞ ,
durum VARCHAR (on beş) OLUMSUZ BOŞ ,
İNDEKS par_ind(kitap_kimliği),
BİRİNCİL ANAHTAR (ödünç_kimlik,ödünç_tarihi),
YABANCI ANAHTAR (kitap_kimliği) REFERANSLAR kitabın(İD)
ÜZERİNDE SİLMEK ÇAĞLAYAN
ÜZERİNDE GÜNCELLEME ÇAĞLAYAN
) MOTOR = INNODB ;

Şimdi, her iki tabloya da bazı kayıtlar eklemek için aşağıdaki SQL deyimlerini çalıştırın. İlk INSERT ifadesi içine dört kayıt ekleyecektir. kitabın tablo. dört değeri İD alanı kitabın tablo, otomatik artış özelliği için 1, 2, 3 ve 4 olacaktır. İkinci INSERT ifadesi, içine dört kayıt ekleyecektir. book_borrow_info göre İD değeri kitabın tablo.



SOKMAK İÇİNE kitabın DEĞERLER
( BOŞ , 'Bir alaycı kuş öldürmek için', 'Harper Lee', 'Grand Central Yayıncılık'),
( BOŞ , 'Yuz Yıllık Yalnızlık', 'Garcia Marquez', 'Lütfi Özkök'),
( BOŞ , 'Hindistan'a Bir Geçiş', 'Forster, E.M.', 'BBC Hulton Resim Kitaplığı'),
( BOŞ , 'Görünmez Adam', 'Ralph Ellison', 'Britannica Ansiklopedisi, Inc.');

SOKMAK İÇİNE book_borrow_info DEĞERLER
('123490', 1, '2020-02-15', '2020-02-25', 'İade'),
('157643', 2, '2020-03-31', '2020-03-10', 'Askıda olması'),
('174562', 4, '2020-04-04', '2020-04-24', 'Ödünç alındı'),
('146788', 3, '2020-04-10', '2020-01-20', 'Ödünç alındı');

Alt tablonun yabancı anahtar alanına, ana tablonun birincil anahtar alanında olmayan bir değer girmeye çalışırsanız, MySQL bir hata üretecektir. Aşağıdaki SQL deyimi bir hata üretecektir çünkü ana tablo, kitabın herhangi bir kimlik değeri içermiyor 10 .

SOKMAK İÇİNE book_borrow_info DEĞERLER
('195684', 10, '2020-04-15', '2020-04-30', 'İade');

Aşağıdaki DELETE deyimi yürütüldükten sonra dördüncü kayıt listeden ne zaman kaldırılacaktır? kitabın tablodan sonra ilgili kayıtlar book_borrow_info tablo, yabancı anahtar kısıtlaması için otomatik olarak kaldırılacaktır.

SİLMEK İTİBAREN kitabın NEREDE İD= 4;
SEÇME * itibaren kitabın;
SEÇME * itibaren book_borrow_info;

ALTER deyimini kullanarak Yabancı Anahtar Kısıtlama tanımlayın

İlk başta, içine bazı kayıtlar ekleyin borçlular tablo ve bu tablo bir sonraki adımda ana tablo olarak tanımlanacaktır. YAŞ Beyan.

SOKMAK İÇİNE borçlular DEĞERLER
('123490', 'Patrick Wood', '34 Batı Caddesi LANCASTER LA14 9ZH', ' [e-posta korumalı]'),
('157643', 'Ezra Martin', '10 The Grove BİRMINGHAM B98 1EU', ' [e-posta korumalı]'),
('174562', 'John Innes Archie', '55 Ana Yol LIVERPOOL L2 3OD', ' [e-posta korumalı]'),
('146788', 'Frederick Hanson', '85 Highfield Yolu SHREWSBURY SY46 3ME', ' [e-posta korumalı]');

Aşağıdakileri çalıştırın YAŞ için başka bir yabancı anahtar kısıtlaması belirleme ifadesi book_borrow_info ilişki kurmak için tablo borçlular tablo. Buraya, ödünç_kimlik için bir yabancı anahtar olarak tanımlanır book_borrow_info tablo.

ALTER TABLE book_borrow_info CONSTRAINT EKLE fk_borrower
YABANCI ANAHTAR(ödünç_kimlik)REFERANSLAR borçlular(İD)GÜNCELLEME KISITLAMASI ÜZERİNDE SİLME KASKADA;

Şimdi, içine bir kayıt ekleyin book_borrow_info geçerli olan ödünç_kimlik içinde var olan değer İD alanı borçlular tablo. 157643 borçlular tablosunda değer var ve aşağıdaki INSERT ifadesi başarıyla yürütülecek.

SOKMAK İÇİNE book_borrow_info DEĞERLER
('157643', 1, '2020-03-10', '2020-03-20', 'İade');

Aşağıdaki INSERT ifadesi, id değeri nedeniyle bir hata mesajı üretecektir. 195680 borçlular tablosunda yok.

SOKMAK İÇİNE book_borrow_info DEĞERLER
('195680', 1, '2020-04-15', '2020-04-30', 'İade');

Çözüm:

Yabancı anahtar kısıtlamalarını doğru tanımlamak, ilişkisel bir veritabanı oluşturmak ve tablolar arasındaki verileri uygun şekilde yönetmek için çok önemli bir görevdir. Veritabanı tasarımcıları için yabancı anahtar kısıtlamalarının kullanımlarını bilmek çok önemlidir. Umarım bu makale, yeni veritabanı tasarımcılarının yabancı anahtar kısıtlamaları kavramını anlamalarına ve bunları görevlerinde düzgün bir şekilde uygulamalarına yardımcı olur.