Saya ingin menghapus kendala dari meja saya. Kueri saya adalah:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
Tapi saya mendapat kesalahan:
#1064
- Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat 'kendalaFK_tbl_magazine_issue_mst_users
' di baris 1
mysql
foreign-keys
constraints
alter
deepu sankar
sumber
sumber
CHECK
batasan, tidak perlu menjatuhkannya karena tidak ada batasan yang sebenarnya dibuat. Anda dapat memilih dariinformation_schema.table_constraints
untuk memverifikasi, dan Anda bahkan dapat menjalankanadd constraint
berulang-ulang tanpa kesalahan. MySQL tidak mendukungCHECK
kendala tetapi memungkinkan SQL yang dimaksudkan untuk membuatnya (tanpa benar-benar membuat kendala).Jawaban:
Mysql memiliki sintaks khusus untuk menjatuhkan batasan kunci asing:
sumber
alter table .. drop constraint
. MySQL adalah yang aneh, sepertinya.Saya memiliki masalah yang sama dan saya harus menyelesaikannya dengan kode ini:
sumber
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
Tidak ada yang namanya
DROP CONSTRAINT
di MySQL. Dalam kasus Anda, Anda bisa menggunakannyaDROP FOREIGN KEY
.sumber
Jika kendala bukan kunci asing, mis. satu ditambahkan menggunakan 'CONSTRAINT UNIK (colA, colB)' maka itu adalah indeks yang dapat dijatuhkan menggunakan
ALTER TABLE ... DROP INDEX ...
sumber
Juga bagus, Anda dapat menonaktifkan sementara semua pemeriksaan kunci asing dari database mysql:
SET FOREIGN_KEY_CHECKS=0;
Dan untuk mengaktifkannya lagi:SET FOREIGN_KEY_CHECKS=1;
sumber
Untuk menambahkan sedikit ke jawaban Robert Knight, karena judul posting itu sendiri tidak menyebutkan kunci asing (dan karena itu tidak memiliki sampel kode lengkap dan karena blok kode komentar SO tidak menunjukkan serta kode jawaban ' blok), saya akan menambahkan ini untuk batasan unik . Salah satu dari ini bekerja untuk menghilangkan batasan:
atau
sumber
Beberapa ORM atau kerangka kerja menggunakan konvensi penamaan yang berbeda untuk kunci asing daripada standar
FK_[parent table]_[referenced table]_[referencing field]
, karena mereka dapat diubah.Laravel misalnya digunakan
[parent table]_[referencing field]_foreign
sebagai konvensi penamaan. Anda dapat menampilkan nama kunci asing dengan menggunakan kueri ini, seperti yang ditunjukkan di sini :Kemudian hapus kunci asing dengan menjalankan permintaan DROP FOREIGN KEY yang disebutkan sebelumnya dan nama yang tepat.
sumber
Bagi yang datang ke sini menggunakan MariaDB:
Perhatikan bahwa MariaDB memungkinkan pernyataan DROP CONSTRAINT secara umum, misalnya untuk menjatuhkan batasan pemeriksaan:
https://mariadb.com/kb/en/library/alter-table/
sumber
CONSTRAINT CHECK(a > b)
. Untuk batasan kunci asing, tampaknya Anda masih memerlukanDROP FOREIGN KEY
sintaks, setidaknya dalam MariaDB versi 10.2sumber
Tidak ada
DROP CONSTRAINT
Di MySql. Ini bekerja seperti sulap di mysql 5.7sumber
Cara paling sederhana untuk menghilangkan kendala adalah dengan menggunakan sintaks yang
ALTER TABLE tbl_name DROP CONSTRAINT symbol;
diperkenalkan di MySQL 8.0.19 :db <> demo biola
sumber
ini akan berfungsi pada MySQL untuk menghilangkan batasan
sumber
DROP PRIMARY KEY
seharusnya tidak bekerja.DROP FOREIGN KEY
berfungsi tetapi Anda harus menentukan untuk siapadrop
. MisalnyaALTER TABLE tablename DROP FOREIGN KEY id_name_fk