Saya punya dua tabel, table1
adalah tabel induk dengan kolom ID
dan table2
dengan kolom IDFromTable1
(bukan nama sebenarnya) ketika saya memasukkan FK IDFromTable1
ke ID
dalam table1
saya mendapatkan kesalahan Foreign key constraint is incorrectly formed error
. Saya ingin menghapus catatan tabel 2 jika table1
catatan dihapus. Terima kasih atas bantuannya
ALTER TABLE `table2`
ADD CONSTRAINT `FK1`
FOREIGN KEY (`IDFromTable1`) REFERENCES `table1` (`ID`)
ON UPDATE CASCADE
ON DELETE CASCADE;
Beri tahu saya jika ada informasi lain yang diperlukan. Saya baru di mysql
table2.IDFromTable1
dantable1.ID
?Jawaban:
Saya mengalami masalah yang sama dengan HeidiSQL. Kesalahan yang Anda terima sangat samar. Masalah saya akhirnya adalah bahwa kolom kunci asing dan kolom referensi tidak dari jenis atau panjang yang sama.
Kolom kunci asing adalah
SMALLINT(5) UNSIGNED
dan kolom referensi adalahINT(10) UNSIGNED
. Setelah saya membuat keduanya sama persis, penciptaan kunci asing bekerja dengan sempurna.sumber
Saya memiliki masalah yang sama ketika tabel induk dibuat menggunakan
MyISAM
mesin. Ini kesalahan konyol, yang saya perbaiki:sumber
pastikan kolom identik (dengan tipe yang sama) dan jika kolom referensi tidak
primary_key
, pastikan kolomnya samaINDEXED
.sumber
KEY referencing_column(referencing_column)
SEBELUM kedua definisi kunci asing mereka berdua berhasil ditambahkan :)Sintaks untuk mendefinisikan kunci asing sangat memaafkan, tetapi bagi siapa pun yang tersandung pada ini, fakta bahwa kunci asing harus "dari jenis yang sama" berlaku bahkan untuk pengumpulan, bukan hanya tipe data dan penandatanganan panjang dan bit.
Bukannya Anda akan mencampur collation dalam model Anda (kan?) Tetapi jika Anda melakukannya, pastikan bidang kunci utama dan asing Anda memiliki tipe collation yang sama dalam phpmyadmin atau Heidi SQL atau apa pun yang Anda gunakan.
Semoga ini menghemat waktu empat jam percobaan dan kesalahan itu membuat saya rugi.
sumber
COLLATE utf8mb4_unicode_ci
juga masalah (tak terduga) saya (pada mesin dev).Saya memiliki masalah yang sama, tetapi menyelesaikannya.
Pastikan kolom 'ID' di 'table1' memiliki indeks UNIK !
Dan tentu saja jenis, panjang kolom 'ID' dan 'IDFromTable1' dalam dua tabel ini harus sama. Tapi Anda sudah tahu tentang ini.
sumber
Hanya untuk penyelesaian.
Kesalahan ini mungkin juga terjadi jika Anda memiliki kunci asing dengan VARCHAR (..) dan charset dari tabel referensi berbeda dari tabel referensi itu.
misalnya VARCHAR (50) dalam Tabel Latin1 berbeda dari VARCHAR (50) dalam Tabel UTF8.
sumber
teks kesalahan mysql tidak banyak membantu, dalam kasus saya, kolom memiliki batasan "tidak nol", jadi "pada penghapusan set nol" tidak diizinkan
sumber
jika semuanya ok, tambahkan saja
->unsigned();
di akhirforegin key
.jika tidak berhasil, periksa tipe data dari kedua bidang. mereka harus sama.
sumber
Saya memiliki masalah yang sama, kedua kolom INT (11) TIDAK NULL tapi saya tidak bisa membuat kunci asing. Saya harus menonaktifkan pemeriksaan kunci asing untuk menjalankannya dengan sukses:
Semoga ini bisa membantu seseorang.
sumber
Satu lagi kemungkinan penyebab untuk tampilan kesalahan ini. Urutan tempat saya membuat tabel salah. Saya mencoba untuk referensi kunci dari tabel yang belum dibuat.
sumber
(Resent Terakhir) Bahkan jika nama bidang dan tipe data sama tetapi susunannya tidak sama, itu juga akan mengakibatkan masalah itu.
Sebagai contoh
Coba ubah menjadi
....
Ini berhasil untuk saya.
sumber
Periksa mesin tabel, kedua tabel harus mesin yang sama, yang sangat membantu saya.
sumber
SHOW TABLE STATUS LIKE 'table_name';
Saya memiliki masalah yang sama.
Masalahnya adalah kolom referensi bukan kunci utama.
Jadikan itu sebagai kunci utama dan masalah terpecahkan.
sumber
Meskipun jawaban lain cukup membantu, hanya ingin berbagi pengalaman saya juga.
Saya menghadapi masalah ketika saya telah menghapus tabel yang
id
sudah direferensikan sebagai kunci asing di tabel lain ( dengan data ) dan mencoba untuk membuat ulang / mengimpor tabel dengan beberapa kolom tambahan.Permintaan untuk rekreasi (dibuat dalam phpMyAdmin) tampak seperti berikut:
Seperti yang Anda perhatikan,
PRIMARY KEY
indeks ditetapkan setelah pembuatan ( dan penyisipan data ) yang menyebabkan masalah.Larutan
Solusinya adalah menambahkan
PRIMARY KEY
indeks pada permintaan definisi tabel untukid
yang dirujuk sebagai kunci asing, sementara juga menghapusnya dariALTER TABLE
bagian di mana indeks sedang ditetapkan:sumber
Saya kehilangan berjam-jam untuk itu!
PK di satu meja berada
utf8
di meja lainnya adalahutf8_unicode_ci
!sumber
Coba jalankan sebagai berikut:
sumber
Saya memiliki masalah yang sama dengan Symfony 2.8.
Awalnya saya tidak mengerti, karena tidak ada masalah yang sama dengan panjang kunci asing dll.
Akhirnya saya harus melakukan hal berikut dalam folder proyek. (Server restart tidak membantu!)
app/console doctrine:cache:clear-metadata app/console doctrine:cache:clear-query app/console doctrine:cache:clear-result
sumber
terima kasih S Doerin:
"Hanya untuk penyelesaian. Kesalahan ini mungkin juga terjadi jika Anda memiliki kunci asing dengan VARCHAR (..) dan charset dari tabel yang direferensikan berbeda dari tabel yang mereferensikannya. Mis. VARCHAR (50) dalam Tabel Latin1 adalah berbeda dari VARCHAR (50) di Tabel UTF8. "
saya memecahkan masalah ini, mengubah jenis karakter dari tabel. ciptaan memiliki latin1 dan yang benar adalah utf8.
tambahkan baris berikutnya. SET KARAKTER DEFAULT = utf8;
sumber
Saya memiliki masalah menggunakan tabel Alter untuk menambahkan kunci asing antara dua tabel dan hal yang membantu saya memastikan setiap kolom yang saya coba tambahkan hubungan kunci asing diindeks. Untuk melakukannya di PHP myAdmin: Buka tabel dan klik pada tab struktur. Klik opsi indeks untuk mengindeks kolom yang diinginkan seperti yang ditunjukkan pada tangkapan layar:
Setelah saya mengindeks kedua kolom yang saya coba referensi dengan kunci asing saya, saya berhasil menggunakan tabel alter dan membuat hubungan kunci asing. Anda akan melihat bahwa kolom diindeks seperti pada tangkapan layar di bawah ini:
perhatikan bagaimana zip_code muncul di kedua tabel.
sumber
Anda perlu memeriksa bahwa keduanya sama di semua propertinya, termasuk dalam "Collation"
sumber
Saya menggunakan HeidiSQL dan untuk mengatasi masalah ini saya harus membuat indeks di tabel yang direferensikan dengan semua kolom yang direferensikan.
sumber
Saya mengalami masalah yang sama tadi. Dalam kasus saya, yang harus saya lakukan adalah memastikan bahwa tabel yang saya rujuk dalam kunci asing harus dibuat sebelum tabel saat ini (sebelumnya dalam kode). Jadi jika Anda mereferensikan variabel (x * 5) sistem harus tahu apa itu x (x harus dideklarasikan di baris kode sebelumnya). Ini menyelesaikan masalah saya, semoga akan membantu orang lain.
sumber
Saya memiliki masalah yang sama dengan Pembuat skema migrasi Laravel 5.1 dengan MariaDB 10.1.
Masalahnya adalah bahwa saya telah mengetik
unigned
alih-alihunsigned
(s
surat itu hilang) saat mengatur kolom.Setelah memperbaiki kesalahan ketik diperbaiki untuk saya.
sumber
Bahkan saya mengalami masalah yang sama dengan mysql dan liquibase. Jadi inilah masalahnya: Tabel dari mana Anda ingin mereferensikan kolom tabel lain berbeda baik dalam hal tipe data atau dalam hal ukuran tipe data.
sumber
Pastikan Anda telah menentukan nama tabel dalam case yang sesuai (jika nama tabel peka huruf besar-kecil di database Anda). Dalam kasus saya, saya harus berubah
untuk
perhatikan
customer
perubahan keCUSTOMER
.sumber
Atau Anda dapat menggunakan DBDesigner4 yang memiliki antarmuka grafis untuk membuat database Anda dan menghubungkannya menggunakan FK. Klik kanan pada tabel Anda dan pilih 'Salin Tabel SQL Buat' yang membuat kode.
sumber
Itu subjek lama tapi saya menemukan sesuatu. Saat membangun meja kerja MySQL, ia juga mendapatkan hubungan dari tabel lainnya. tinggalkan saja pilar-pilar yang berhubungan dengan Anda. Bersihkan kolom lain yang ditambahkan secara otomatis. Ini bekerja untuk saya.
sumber
Kasus saya adalah saya salah ketik pada kolom yang dirujuk:
Pesan kesalahannya cukup samar dan saya sudah mencoba semuanya - memverifikasi jenis kolom, susunan, mesin, dll.
Butuh beberapa saat untuk mencatat kesalahan ketik dan setelah memperbaiki semuanya bekerja dengan baik:
sumber
Saya menghadapi masalah ini kesalahan datang ketika Anda meletakkan kunci utama di tipe data yang berbeda seperti:
Tabel 1:
Meja 2:
tipe data untuk id dari tabel kedua harus bertahap
sumber
Masalahnya sangat sederhana untuk dipecahkan
misalnya: Anda memiliki dua tabel dengan nama pengguna dan posting dan Anda ingin membuat kunci asing di tabel posting dan Anda menggunakan phpMyAdmin
1) di tabel posting tambahkan kolom baru ( nama : use_id | ketik : seperti id di tabel pengguna | Panjang : seperti id di tabel pengguna | Default : NULL | Atribut : unsigned | index: INDEX)
2) pada tab Struktur buka tampilan relasi ( Nama kendala : atur otomatis oleh phpmyAdmin | nama kolom : pilih user_id | tabel : pengguna | kunci : id, ...)
Itu hanya diselesaikan
sumber