Ada beberapa hal yang dapat menyebabkan errno 150, jadi bagi orang yang mencari topik ini, inilah yang menurut saya dekat dengan daftar lengkap (sumber Penyebab Errno 150 ):
Untuk errno 150 atau errno 121, cukup mengetik SHOW ENGINE INNODB STATUS, ada bagian yang disebut "KESALAHAN ASING TERBESAR KUNCI". Di bawah itu akan memberi Anda pesan kesalahan yang sangat membantu, yang biasanya akan memberi tahu Anda langsung apa masalahnya. Anda memerlukan hak SUPER untuk menjalankannya, jadi jika Anda tidak memilikinya, Anda hanya perlu menguji skenario berikut.
1) Jenis Data Tidak Cocok: Jenis kolom harus sama
2) Kolom Induk Tidak Diindeks (Atau Diindeks dengan Urutan Salah)
3) Kolom Kolom Tidak Cocok
4) Menggunakan SET NULL pada kolom NOT NULL
5) Table Collations Don't Match: bahkan jika collations kolom cocok, pada beberapa versi MySQL ini bisa menjadi masalah.
6) Kolom Induk Tidak Sebenarnya Ada di Tabel Induk. Periksa ejaan (dan mungkin spasi di awal atau akhir kolom)
7) Salah satu indeks pada salah satu kolom tidak lengkap, atau kolom terlalu panjang untuk indeks lengkap. Perhatikan bahwa MySQL (kecuali jika Anda mengubahnya) memiliki panjang kunci kolom tunggal maksimum 767 byte (ini sesuai dengan kolom UTF varchar (255))
Jika Anda mendapatkan errno 121, berikut adalah beberapa penyebab:
1) Nama kendala yang Anda pilih sudah diambil
2) Pada beberapa sistem jika ada perbedaan kasus dalam pernyataan dan nama tabel Anda. Ini dapat menggigit Anda jika Anda berpindah dari satu server ke server lain yang memiliki aturan penanganan kasus yang berbeda.