Rumah > Soal Jawab > teks badan
Saya menghadapi masalah memadamkan baris daripada jadual.
Saya menggunakan pertanyaan ini untuk memadamkan kunci asingnya dahulu dan kemudian memadamkan lajur yang dituju oleh kunci tersebut.
ALTER TABLE resources drop foreign key fk_res_to_addr; ALTER TABLE resources drop column address_id;
Mengalih keluar kekangan berfungsi dengan baik. Pemadaman lajur gagal dengan Cannot drop index 'fk_res_to_addr': required in aforeign key constraint
.
Saya mula-mula mencuba (dan masih mencuba) untuk mengetahui apa yang masih bergantung pada indeks itu. Saya menggunakan pertanyaan ini (terdapat dalam jawapan ini):
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'some_db' AND REFERENCED_TABLE_NAME = 'resources';
Tetapi tiada apa-apa di sana.
Kemudian saya cuba melumpuhkan cek:
SET FOREIGN_KEY_CHECKS=0;
Sudah tentu, kemudian dayakannya semula. Ini juga tiada kesan.
Adakah apa-apa lagi yang boleh saya lakukan untuk mengetahui perkara yang bergantung pada indeks ini? Adakah saya kehilangan sesuatu?
** EDIT - definisi jadual seperti yang diminta** Ini ialah definisi jadual semasa. Seperti yang anda lihat, address_id kini mempunyai kunci asing, tetapi indeks masih ada.
create table resources ( id bigint auto_increment primary key, created bigint not null, lastModified bigint not null, uuid varchar(255) not null, description longtext null, internalName varchar(80) null, publicName varchar(80) not null, origin varchar(80) null, archived bigint unsigned null, contact_id bigint null, colorClass varchar(80) null, address_id bigint null, url mediumtext null, constraint uuid unique (uuid), constraint FK_contact_id foreign key (contact_id) references users (id) ) charset = utf8; create index fk_res_to_addr on resources (address_id); create index idx_resources_archived on resources (archived); create index idx_resources_created on resources (created);
P粉1455438722024-03-26 20:06:21
Jika anda sudi mencuba
SHOW INDEXES FROM database_name.table_name;
Ia mungkin memberitahu anda jika fk_res_to_addr' sebenarnya telah dipadamkan.
P粉0685109912024-03-26 16:29:38
Saya tidak pernah menemui ini sebelum ini, tetapi sangat teruk saya mengesyaki mungkin terdapat pepijat mysql. Ia berfungsi "hanya" dalam mariadb.
Anda sepatutnya melihat ralat Tidak dapat MENYELESAIKAN 'fk_res_to_addr'; Semak sama ada lajur/kunci itu wujud dan ralat yang anda laporkan - lihat https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=c5b0bbc9d6c12f74e00ba15d6c12f74e00ba16d Pada penciptaan, mysql mencipta indeks menggunakan nama yang anda tetapkan kepada fk dan memberikan namanya sendiri kepada fk. Hasilnya ialah ralat yang disebutkan di atas ditambah
https://dbfiddle.uk/?rdbms=mysql_5. 7&fiddle=c5b0bbc9d6c12f74e00ba8d059a15638. Saya cadangkan anda cuba mengeluarkan kunci, kemudian kunci asing, kemudian lajur.