Saya telah menyiapkan tabel yang berisi kolom dengan kunci asing, setel ke ON DELETE CASCADE
(hapus anak ketika orang tua dihapus)
Apa perintah SQL untuk mengubahnya ON DELETE RESTRICT
? (tidak dapat menghapus orang tua jika memiliki anak)
Saya telah menyiapkan tabel yang berisi kolom dengan kunci asing, setel ke ON DELETE CASCADE
(hapus anak ketika orang tua dihapus)
Apa perintah SQL untuk mengubahnya ON DELETE RESTRICT
? (tidak dapat menghapus orang tua jika memiliki anak)
Pertanyaan lama tetapi menambahkan jawaban sehingga seseorang bisa mendapatkan bantuan
Proses dua langkahnya:
Misalkan, a table1
memiliki kunci asing dengan nama kolom fk_table2_id
, dengan nama kendalafk_name
dan table2
disebut tabel dengan kunci t2
( sesuatu seperti di bawah ini dalam diagram saya ).
table1 [ fk_table2_id ] --> table2 [t2]
Langkah pertama , DROP CONSTRAINT lama: ( referensi )
ALTER TABLE `table1`
DROP FOREIGN KEY `fk_name`;
batasan pemberitahuan dihapus, kolom tidak dihapus
Langkah kedua , TAMBAHKAN BATAS baru:
ALTER TABLE `table1`
ADD CONSTRAINT `fk_name`
FOREIGN KEY (`fk_table2_id`) REFERENCES `table2` (`t2`) ON DELETE CASCADE;
menambahkan kendala, kolom sudah ada
Contoh:
Saya memiliki UserDetails
tabel yang merujuk ke Users
tabel:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`)
:
:
Langkah pertama:
mysql> ALTER TABLE `UserDetails` DROP FOREIGN KEY `FK_User_id`;
Query OK, 1 row affected (0.07 sec)
Tahap kedua:
mysql> ALTER TABLE `UserDetails` ADD CONSTRAINT `FK_User_id`
-> FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`) ON DELETE CASCADE;
Query OK, 1 row affected (0.02 sec)
hasil:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES
`Users` (`User_id`) ON DELETE CASCADE
:
Anda dapat melakukan ini dalam satu kueri jika Anda ingin mengubah namanya:
Ini berguna untuk meminimalkan waktu henti jika Anda memiliki meja besar.
sumber
sumber
ALTER TABLE table_name ADD
...ON DELETE RESTRICT
SHOW CREATE TABLE
.Ingatlah bahwa MySQL menyimpan indeks sederhana pada kolom setelah menghapus kunci asing. Jadi, jika Anda perlu mengubah kolom 'referensi', Anda harus melakukannya dalam 3 langkah
drop index
klausa)sumber
Anda cukup menggunakan satu kueri untuk mengatur semuanya:
ALTER TABLE products DROP FOREIGN KEY oldConstraintName, ADD FOREIGN KEY (product_id, category_id) REFERENCES externalTableName (foreign_key_name, another_one_makes_composite_key) ON DELETE CASCADE ON UPDATE CASCADE
sumber
Saya memiliki banyak FK untuk diubah, jadi saya menulis sesuatu untuk membuat pernyataan untuk saya. Kupikir aku akan berbagi:
sumber