Saya punya 2 tabel: T1 dan T2, mereka adalah tabel yang ada dengan data. Kami memiliki hubungan satu ke banyak antara T1 dan T2. Bagaimana cara mengubah definisi tabel untuk melakukan penghapusan cascading di SQL Server ketika catatan dari T1 dihapus, semua catatan terkait di T2 juga dihapus.
Kendala asing ada di antara mereka. Saya tidak ingin menjatuhkan tabel atau membuat pemicu untuk melakukan penghapusan untuk T2. Misalnya, ketika saya menghapus seorang karyawan, semua catatan ulasan juga harus hilang.
T1 - Karyawan,
Employee ID
Name
Status
T2 - Ulasan Kinerja,
Employee ID - 2009 Review
Employee ID - 2010 Review
sql-server
cascading-deletes
Bichvan Nguyen
sumber
sumber
Untuk menambahkan "Hapus kaskade" ke kunci asing yang ada di SQL Server Management Studio:
Pertama, pilih Kunci Asing Anda, dan buka "DROP dan Buat Ke .." di jendela Permintaan baru.
Kemudian, tambahkan saja
ON DELETE CASCADE
keADD CONSTRAINT
perintah:Dan tekan tombol "Execute" untuk menjalankan kueri ini.
Ngomong-ngomong, untuk mendapatkan daftar Kunci Asing Anda, dan melihat mana yang "Cascade delete" dihidupkan, Anda dapat menjalankan skrip ini:
Dan jika Anda pernah menemukan bahwa Anda tidak bisa
DROP
tabel tertentu karena batasan kunci asing, tetapi Anda tidak bisa mengetahui mana yang menyebabkan masalah, maka Anda dapat menjalankan perintah ini:SQL dalam artikel itu mencantumkan semua FK yang merujuk pada tabel tertentu.
Semoga semua ini bisa membantu.
Permintaan maaf untuk jari panjang. Saya hanya mencoba untuk menunjukkan maksud.
sumber
Anda dapat melakukan ini dengan SQL Server Management Studio.
→ Klik kanan desain tabel dan pergi ke Relationships dan pilih kunci asing di panel sisi kiri dan di panel sisi kanan, perluas menu "INSERT and UPDATE spesifikasi" dan pilih "Cascade" sebagai Delete Rule.
sumber
Gunakan sesuatu seperti
Isi nama kolom yang benar dan Anda harus ditetapkan. Seperti yang dinyatakan dengan tepat oleh mark_s, jika Anda sudah memiliki batasan kunci asing, Anda mungkin perlu menghapus yang lama terlebih dahulu lalu membuat yang baru.
sumber
Pertama Yang Mengaktifkan properti ONCascade:
1.Drop kendala kunci asing yang ada
2. tambahkan yang baru dengan pengaturan ON DELETE CASCADE diaktifkan
Ex:
Properti Second To Disable ONCascade:
1.Drop kendala kunci asing yang ada
2.Tambahkan yang baru dengan pengaturan ON DELETE NO ACTION diaktifkan
Ex:
sumber
ON DELETE CASCADE
Ini menentukan bahwa data anak dihapus ketika data induk dihapus.
Untuk kunci asing ini, kami telah menentukan
ON DELETE CASCADE
klausa yang memberitahu SQL Server untuk menghapus catatan yang sesuai di tabel anak ketika data di tabel induk dihapus. Jadi dalam contoh ini, jika nilai product_id dihapus dari tabel produk, catatan terkait dalam tabel inventaris yang menggunakan product_id ini juga akan dihapus.sumber
Jika hubungan satu ke banyak adalah dari T1 ke T2 maka itu tidak mewakili fungsi dan oleh karena itu tidak dapat digunakan untuk menyimpulkan atau menyimpulkan fungsi terbalik yang menjamin nilai T2 yang dihasilkan tidak menghilangkan tupel dari T1 bergabung dengan T2 yang secara deduktif valid , karena tidak ada fungsi invers yang valid secara deduktif. (mewakili fungsi adalah tujuan dari kunci primer.) Jawaban dalam SQL think adalah ya, Anda dapat melakukannya. Jawaban dalam pemikiran relasional adalah tidak, Anda tidak dapat melakukannya. Lihat poin-poin ambiguitas dalam Codd 1970. Hubungannya harus banyak ke satu dari T1 ke T2.
sumber
Saya pikir Anda tidak bisa hanya menghapus properti tabel bagaimana jika ini adalah data produksi aktual, cukup hapus konten yang tidak mempengaruhi skema tabel.
sumber