Saya mencari solusi untuk masalah ini di Internet dan memeriksa pertanyaan Stack Overflow, tetapi tidak ada solusi yang berfungsi untuk kasus saya.
Saya ingin membuat kunci asing dari tabel sira_no ke metal_kod.
ALTER TABLE sira_no
ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU)
REFERENCES metal_kod(METAL_KODU)
ON DELETE SET NULL
ON UPDATE SET NULL ;
Skrip ini mengembalikan:
Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150)
Saya mencoba menambahkan indeks ke tabel referensi:
CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU);
Saya memeriksa METAL_KODU di kedua tabel (charset dan collation), tetapi saya tidak dapat menemukan solusi untuk masalah ini. Bagaimana cara memperbaiki masalah ini?
Berikut adalah tabel metal_kod:
METAL_KODU varchar(4) NO PRI
DURUM bit(1) NO
METAL_ISMI varchar(30) NO
AYAR_YOGUNLUK smallint(6) YES 100
mysql
foreign-keys
mysql-error-1005
lamostreta.dll
sumber
sumber
metal_kod
tabel ... bidang mana dalam tabel itu yang harus dirujuk oleh Kunci Asing?Jawaban:
Kode Kesalahan: 1005 - ada referensi kunci utama yang salah dalam kode Anda
Biasanya ini karena bidang kunci asing yang direferensikan tidak ada. Mungkin Anda salah ketik, atau periksa kasusnya seharusnya sama, atau ada ketidakcocokan tipe kolom. Bidang terkait kunci asing harus sama persis dengan definisi.
Beberapa penyebab yang diketahui mungkin:
INT(10)
bidang kunci perluINT(10)
juga dan tidakINT(11)
atauTINYINT
. Anda mungkin ingin mengonfirmasi ukuran bidang menggunakanSHOW
CREATE
TABLE
karena Browser Kueri terkadang akan menampilkan secara visual hanyaINTEGER
untukINT(10)
danINT(11)
. Anda juga harus memastikan bahwa yang satu tidakSIGNED
dan yang lainnya adalahUNSIGNED
. Keduanya harus persis sama.MyISAM
tabel. Untuk menggunakan kunci asing, tabel harus berupa keduanyaInnoDB
. (Sebenarnya, jika kedua tabel adaMyISAM
maka Anda tidak akan mendapatkan pesan kesalahan - itu tidak akan membuat kunci.) Di Browser Kueri, Anda dapat menentukan jenis tabel.ON
DELETE
SET
NULL
, tetapi bidang kunci yang relevan disetel keNOT
NULL
. Anda dapat memperbaikinya dengan mengubah kaskade Anda atau menyetel bidang untuk mengizinkanNULL
nilai.ALTER
pernyataan Anda atau Anda salah mengetik salah satu nama bidang dalam hubungan tersebutUntuk lebih jelasnya, lihat: Nomor Kesalahan MySQL 1005 Tidak dapat membuat tabel
sumber
SHOW ENGINE INNODB STATUS
seperti yang disebutkan dalam pertanyaan ini membantu saya mendiagnosis masalah khusus saya (PEBCAK, dalam kasus saya ...)set names 'utf8', storage_engine=MYISAM;
di awal skrip memecahkan masalah bagi saya. Terima kasih @ user319198 dan @Stefano untuk jawaban yang lengkap! : o)Ini juga bisa terjadi saat mengekspor database Anda dari satu server ke server lain dan tabel dicantumkan dalam urutan abjad secara default.
Jadi, tabel pertama Anda dapat memiliki kunci asing dari tabel lain yang belum dibuat. Dalam kasus seperti itu, nonaktifkan foreign_key_checks dan buat database.
Cukup tambahkan yang berikut ini ke skrip Anda:
dan itu akan berhasil.
sumber
Sangat sering terjadi ketika kunci asing dan kunci referensi tidak memiliki jenis atau panjang yang sama.
sumber
Kadang-kadang karena tabel master dijatuhkan (mungkin dengan menonaktifkan foreign_key_checks), tetapi kunci asing CONSTRAINT masih ada di tabel lain. Dalam kasus saya , saya telah menjatuhkan tabel dan mencoba membuatnya kembali, tetapi itu memberikan kesalahan yang sama bagi saya.
Jadi coba lepaskan semua BATAS kunci asing dari semua tabel jika ada dan kemudian perbarui atau buat tabel.
sumber
Saya mengalami kesalahan serupa. Masalahnya berkaitan dengan tabel anak dan induk tidak memiliki charset dan pemeriksaan yang sama. Ini bisa diperbaiki dengan menambahkan ENGINE = InnoDB DEFAULT CHARACTER SET = utf8;
... pada pernyataan SQL berarti ada beberapa kode yang hilang.
sumber
Kunci asing harus memiliki tipe yang sama persis dengan kunci utama yang dirujuknya. Untuk contoh memiliki tipe “INT UNSIGNED NOT NULL” maka kunci depan juga harus “INT UNSIGNED NOT NULL”
sumber
Kode Kesalahan: 1005
Saya memiliki masalah serupa, jadi berikut beberapa hal yang saya coba (tidak dalam urutan apa pun, kecuali untuk solusinya :))
Akhirnya, saya melihat bahwa saya membuka dua editor. Satu yang ada di PhpStorm (JetBrains) dan meja kerja MySQL lainnya. Tampaknya PhpStorm / MySQL Workbench membuat semacam kunci edit.
Saya menutup PhpStorm hanya untuk memeriksa apakah penguncian adalah kasusnya (bisa jadi sebaliknya). Ini memecahkan masalah saya.
sumber
Saya mendapat pesan kesalahan yang sama. Akhirnya saya menemukan saya salah mengeja nama tabel di perintah:
melawan
Saya bertanya-tanya mengapa MySQL tidak bisa mengatakan tabel seperti itu tidak ada ...
sumber
MyISAM baru saja disebutkan. Cukup coba tambahkan ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 2; di akhir pernyataan, dengan asumsi bahwa tabel Anda yang lain dibuat dengan MyISAM.
sumber
Dalam kasus saya, itu terjadi ketika satu tabel adalah InnoB dan lainnya adalah MyISAM. Mengubah mesin satu tabel, melalui MySQL Workbench, menyelesaikannya untuk saya.
sumber
Itu terjadi dalam kasus saya, karena nama tabel yang direferensikan dalam deklarasi kendala tidak benar (saya lupa huruf besar dalam nama tabel):
sumber
periksa kedua tabel memiliki skema yang sama InnoDB MyISAM. Saya membuat semuanya sama dalam kasus saya InnoDB dan bekerja
sumber
Masalah saya tidak terdaftar, itu sangat konyol ..... Tabel yang memiliki
FK
PK adalah kompositPK
yang dinyatakan seperti ini: kunci primer (CNPJ
,CEP
) Saya ingin kolom CEP adaFK
di tabel lain dan saya terjebak dalam kesalahan ini, moral cerita baru saja membalikkan kode di atas untuk kunci Primer (CEP
,CNPJ
) dan berhasil. Dapatkan tip teman mereka.sumber