2016-03-26 25 views
1

CASCADE seçeneğini belirterek "yabancı anahtar kısıtlaması" silindiğinde ne olacağı konusunda net değilim.CASCADE davranışı

Örneğin, opsiyon BASAMAKLA bu durumda yapması gereken nedir bu komut

ALTER TABLE table1 DROP CONSTRAINT foreignKeyToTable2 CASCADE. 

düşünün? Eğer ihmal ettiysem ne olur? Ve eğer CASCADE yerine RESTRICT yazdım?

Not: Bu sorgu örneği "Ramez Elmasri, Shamkant B. Navathe - Veri tabanı sistemlerinin temelleri, bölüm 5'in sonu" dan alıntılanmıştır. Yabancı bir anahtar bırakarak zaman birincil anahtarlarını bırakarak, zaman değil

+0

Yabancı anahtarların nasıl çalıştığını açıklamak çok geniş bir soru. Veri tabanı dokümantasyonu genellikle bu durumu iyi bir şekilde kapsar ve fikirler veritabanlarında hemen hemen aynıdır. İşte MySQL belgeleri: https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html. –

+0

Hangi DBMS'yi kullanıyorsunuz? –

+0

@GordonLinoff Yabancı anahtarların nasıl çalıştığını inceledim, ancak CASCADE anahtar kelimesinin ne yazması gerektiğini anlamıyorum. Yani tablo1'den tablo2'ye atıfta bulunan bir yabancı anahtar oluşturur ve CASCADE anahtar sözcüğünü kullanarak tablo2'yi silersem, yabancı anahtar silinir. Eğer bir DBMS olsaydım, yürütme işleminden sonra hiçbir şeyi SIFIR TABLO table1 DROP CONSTRAINT foreignKeyToTable2 CASCADE komutunu silerdim. – Nisba

cevap

3

bir kısıt cascade seçenek yalnızca gereklidir.

alter table t1 drop constraint pk_one; 

Alacağınız::

ERROR: cannot drop constraint pk_one on table t1 because other objects depend on it 
    Detail: constraint t2_id1_fkey on table t2 depends on index pk_one 
    Hint: Use DROP ... CASCADE to drop the dependent objects too. 

Eğer kaçarsan:

alter table t1 drop constraint pk_one cascade; 
Çalıştırmak çalıştığınızda

create table t1 (id integer, constraint pk_one primary key (id)); 
create table t2 (id integer primary key, id1 integer references t1); 

:

Postgres bu örneği düşünün

Alacağınız:

NOTICE: drop cascades to constraint t2_id1_fkey on table t2 

birincil anahtar ihtiyaç duyulan yabancı anahtar yanı düşürüldüğünü Söylüyorum.


Tüm DBMS'lerin basamaklı bir düşüşü desteklemediğini unutmayın. Postgres ve Oracle yapıyor.
MySQL, SQL Server veya Firebird yok. Yabancı anahtarları manuel olarak bu DBMS'ye bırakmanız gerekir.

+0

Teşekkürler! Yani kitaptaki örnek yanlıştı! – Nisba

+0

@LucaMarconato. Sözdizimi Postgres ve Oracle için doğrudur.Yabancı bir anahtarı düşürürken gerekli değildir. –

+0

"Düşey düşürme kaskadlarını" açıkladığınız için teşekkür ederiz – tuxayo