Saya mencoba ini di mysql:
mysql> alter table region drop column country_id;
Dan mendapatkan ini:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Ada ide? Benda kunci asing?
Saya mencoba ini di mysql:
mysql> alter table region drop column country_id;
Dan mendapatkan ini:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Ada ide? Benda kunci asing?
Jawaban:
Anda biasanya mendapatkan kesalahan ini jika tabel Anda menggunakan mesin InnoDB. Dalam hal ini Anda harus menjatuhkan kunci asing, dan kemudian lakukan tabel perubahan dan jatuhkan kolom.
Tetapi bagian yang sulit adalah Anda tidak dapat menjatuhkan kunci asing menggunakan nama kolom, tetapi Anda harus menemukan nama yang digunakan untuk mengindeksnya. Untuk menemukan itu, berikan pilihan berikut:
MENUNJUKKAN wilayah TABEL;
Ini akan menunjukkan kepada Anda nama indeks, kira-kira seperti ini:
region_ibfk_1
KUNCI KONSTRA ASING (country_id
) REFERENSIcountry
(id
) PADA HAPUS TANPA TINDAKAN PADA PEMBARUAN TANPA TINDAKAN
Sekarang cukup keluarkan:
mengubah wilayah tabel menjatuhkan kunci asing
region_ibfk_1
;
Dan akhirnya sebuah:
ubah kolom penurunan wilayah tabel country_id;
Dan kamu baik untuk pergi!
Ini memang kesalahan kunci asing, Anda bisa mengetahuinya menggunakan perror:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
Untuk mengetahui detail lebih lanjut tentang apa yang gagal, Anda dapat menggunakan SHOW ENGINE INNODB STATUS
dan mencari bagian KESALAHAN ASING TERBARU yang berisi rincian tentang apa yang salah.
Dalam kasus Anda, kemungkinan besar ada sesuatu yang merujuk pada kolom country_id.
Anda juga bisa mendapatkan kesalahan ini dengan mencoba menjatuhkan kunci asing yang tidak ada. Jadi ketika menjatuhkan kunci asing, selalu pastikan itu benar-benar ada.
Jika kunci asing memang ada, dan Anda masih mendapatkan kesalahan ini coba yang berikut ini:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
// Jatuhkan kunci asing di sini!
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Ini selalu melakukan trik untuk saya :)
Cukup jalankan kueri alter tabel menggunakan 'KEY' dan bukan 'FOREIGN KEY' di pernyataan drop. Saya harap ini akan membantu menyelesaikan masalah ini, dan akan menghilangkan batasan kunci asing dan Anda dapat mengubah kolom tabel dan menjatuhkan tabel.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
di sini DROP KEY
alih-alih DROP FOREIGN KEY
,
Semoga ini bisa membantu.
Terima kasih
Saya tahu, ini adalah posting lama, tetapi ini adalah hit pertama di mesin pencari favorit semua orang jika Anda mencari kesalahan 1025.
Namun, ada "hack" yang mudah untuk memperbaiki masalah ini:
Sebelum Anda menjalankan perintah, Anda harus terlebih dahulu menonaktifkan pemeriksaan batasan kunci asing menggunakan perintah ini:
SET FOREIGN_KEY_CHECKS = 0;
Kemudian Anda dapat menjalankan perintah Anda.
Setelah Anda selesai, jangan lupa untuk mengaktifkan kembali batasan kunci asing, menggunakan perintah ini:
SET FOREIGN_KEY_CHECKS = 1;
Semoga sukses dengan usaha Anda.
Saya punya masalah serupa sekali. Saya menghapus kunci utama dari TABEL A tetapi ketika saya mencoba untuk menghapus kolom kunci asing dari tabel BI ditunjukkan kesalahan yang sama di atas.
Anda tidak dapat menjatuhkan kunci asing menggunakan nama kolom dan untuk memotong ini di PHPMyAdmin atau dengan MySQL, pertama-tama hapus batasan kunci asing sebelum mengganti nama atau menghapus atribut.
Lihatlah file kesalahan untuk database mysql Anda. Menurut Bug # 26305 sql saya tidak memberi Anda penyebabnya. Bug ini ada sejak MySQL 4.1 ;-)
Jika Anda menggunakan klien seperti MySQL Workbench, klik kanan tabel yang diinginkan dari mana kunci asing akan dihapus, lalu pilih tab kunci asing dan hapus indeks.
Kemudian Anda dapat menjalankan kueri seperti ini:
alter table table_name drop foreign_key_col_name;
Mungkin ada tabel lain dengan kunci asing yang merujuk kunci utama yang Anda coba ubah.
Untuk mengetahui tabel mana yang menyebabkan kesalahan, Anda dapat menjalankan SHOW ENGINE INNODB
STATUS
dan kemudian melihat LATEST FOREIGN KEY ERROR
bagian
Gunakan kategori SHOW CREATE TABLE untuk menampilkan nama kendala.
Kemungkinan besar itu adalah categories_ibfk_1
Gunakan nama untuk menjatuhkan kunci asing terlebih dahulu dan kolom kemudian:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
Perbuatan
SET FOREIGN_KEY_CHECKS=0;
sebelum Operasi juga bisa melakukan trik.
Saya kira masalah batasan kunci asing. Apakah country_id digunakan sebagai kunci asing di tabel lain?
Saya bukan guru DB tapi saya pikir saya memecahkan masalah seperti ini (di mana ada kendala fk) dengan menghapus fk, melakukan hal-hal tabel perubahan saya dan kemudian mengulang hal-hal fk.
Saya akan tertarik untuk mendengar apa hasilnya - kadang mysql cukup samar.
Dalam kasus saya, saya menggunakan meja kerja MySQL dan saya menghadapi masalah yang sama saat menjatuhkan salah satu kolom saya dalam sebuah tabel. Saya tidak dapat menemukan nama kunci asing. Saya mengikuti langkah-langkah berikut untuk menyelesaikan masalah:
Rt. klik skema Anda dan pilih 'inspektur skema'. Ini memberi Anda berbagai tabel, kolom, indeks, dll.
Buka tab bernama 'Indeks' dan cari nama kolom di bawah kolom bernama 'Kolom'. Setelah ditemukan periksa nama tabel untuk catatan ini di bawah nama kolom 'Tabel'. Jika cocok dengan nama tabel yang Anda inginkan, maka catat nama kunci asing dari kolom bernama 'Nama'.
Sekarang jalankan query: ALTER table tableNamexx DROP KEY foreignKeyName;
Sekarang Anda dapat menjalankan pernyataan drop yang akan berhasil dijalankan.
Saya mendapat kesalahan ini dengan MySQL 5.6 tetapi tidak ada hubungannya dengan kunci Asing. Ini pada mesin Windows 7 Professional yang bertindak sebagai server pada LAN kecil.
Aplikasi klien sedang melakukan operasi batch yang membuat tabel mengisinya dengan beberapa data eksternal kemudian menjalankan kueri bergabung dengan tabel permanen kemudian menjatuhkan tabel "sementara". Batch ini melakukan ini sekitar 300 kali dan rutin khusus ini telah berjalan selama seminggu selama beberapa tahun ketika tiba-tiba kita mendapatkan Galat 1025 Tidak dapat mengubah nama masalah pada titik acak dalam bets.
Dalam kasus saya, aplikasi menggunakan 4 pernyataan DDL, CREATE TABLE diikuti oleh 3 CREATE INDEX, tidak ada kunci asing. Namun hanya 2 indeks yang benar-benar dibuat dan file tabel .frm yang sebenarnya diganti nama, pada titik kegagalan.
Solusi saya adalah menyingkirkan pernyataan CREATE INDEX yang terpisah dan membuatnya menggunakan pernyataan CREATE TABLE. Ini pada saat penulisan ini telah memecahkan masalah bagi saya dan bantuan saya orang lain menggaruk-garuk kepala ketika mereka menemukan utas ini.
averageRatings = FOREACH groupedRatings GENERATE group AS movieID, AVG (ratings.rating) AS avgRating, COUNT (ratings.rating) AS numRatings;
Jika Anda menggunakan perintah seperti di atas, Anda harus menggunakan grup dalam huruf kecil. Ini dapat memecahkan masalah Anda, itu memecahkan masalah saya. Setidaknya dalam skrip PIG.