Saya ingin menambahkan Kunci Asing ke tabel yang disebut "Katalog".
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Ketika saya mencoba melakukan ini, saya mendapatkan pesan kesalahan ini:
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
Kesalahan dalam Status INNODB:
120405 14:02:57 Kesalahan dalam batasan kunci asing tabel mytable. # Sql-7fb1_7d3a:
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL:
Cannot resolve table name close to:
(`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL
Ketika saya menggunakan kueri ini berfungsi, tetapi dengan tindakan "menghapus" yang salah:
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Kedua tabel adalah InnoDB dan kedua bidang "INT (11) bukan nol". Saya menggunakan MySQL 5.1.61. Mencoba untuk memecat Permintaan ALTER ini dengan MySQL Workbench (terbaru) di MacBook Pro.
Tabel Membuat Pernyataan:
CREATE TABLE `katalog` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`AnzahlSeiten` int(4) unsigned NOT NULL,
`Sprache` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `katalogname_uq` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC$$
CREATE TABLE `sprache` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Bezeichnung` varchar(45) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `Bezeichnung_UNIQUE` (`Bezeichnung`),
KEY `ix_sprache_id` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
mysql
foreign-keys
frgtv10
sumber
sumber
SHOW CREATE TABLE
, saya hanya bisa bertanya - apakah nama kolom benar-benar ID, ditulis dengan huruf besar?katalog
sudahint(11) unsigned
.sprache
tidak memilikiusigned
bagian, oleh karena itu dua kolom tidak sama.auto_increment
kolom yang buruk. Juga, manual MySQL mengatakan:Corresponding columns in the foreign key and the referenced key must have similar internal data types inside InnoDB so that they can be compared without a type conversion. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same.
. Karena itu, ya, tipe data yang serupa dan tanda yang sama.Jawaban:
Untuk menambahkan kunci asing (grade_id) ke tabel (pengguna) yang ada, ikuti langkah-langkah berikut:
sumber
Cukup gunakan kueri ini, saya telah mencobanya sesuai skenario saya dan berfungsi dengan baik
sumber
Langkah Sederhana ...
sumber
periksa tautan ini. Ini telah membantu saya dengan errno 150: http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/
Di atas kepala saya ada dua hal yang terlintas di benak saya.
Saya menduga masalahnya adalah dengan set NULL pada pembaruan (jika otak saya tidak mundur hari ini seperti yang sering terjadi ...).
Sunting: Saya melewatkan komentar di posting asli Anda. Kolom int yang tidak ditandatangani / tidak ditandatangani mungkin menyelesaikan kasus Anda. Semoga tautan saya membantu seseorang di masa depan.
sumber
Tetapi meja Anda memiliki:
Ini tidak dapat mengatur kolom Sprache ke NULL karena didefinisikan sebagai NOT NULL.
sumber
MySQL akan menjalankan kueri ini:
Bersulang!
sumber
Bagaimana cara memperbaiki
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150) in mysql.
ubah tabel Anda dan tambahkan indeks ke sana ..
Sekarang tambahkan kendala
Catatan jika Anda tidak menambahkan indeks, itu tidak akan berfungsi.
Setelah berjuang dengan itu selama sekitar 6 jam saya datang dengan solusi saya harap ini menyelamatkan jiwa.
sumber
Saat Anda menambahkan batasan kunci asing ke tabel menggunakan ALTER TABLE, ingat untuk membuat indeks yang diperlukan terlebih dahulu.
sumber
coba semua dalam satu permintaan
sumber
ini pada dasarnya terjadi karena meja Anda berada dalam dua rangkaian karakter yang berbeda. sebagai contoh satu tabel dibuat di charset = utf-8 dan tabel lainnya dibuat di CHARSET = latin1 sehingga Anda ingin dapat menambahkan kunci foriegn ke tabel ini. gunakan charset yang sama di kedua tabel maka Anda akan dapat menambahkan kunci foriegn. error 1005 foriegn key constraint yang terbentuk secara salah dapat diselesaikan dari ini
sumber
saya melewati masalah yang sama. Saya kasus saya tabel sudah memiliki data dan ada kunci dalam tabel ini yang tidak ada dalam tabel referensi. Jadi saya harus menghapus baris ini yang tidak menghargai kendala dan semuanya berfungsi.
sumber
langkah 1: jalankan skrip ini
langkah 2: tambahkan kolom
langkah 3: tambahkan kunci asing ke kolom yang ditambahkan
langkah 4: jalankan skrip ini
sumber
Contoh:-
sumber