Saya telah membuat tabel di MySQL Workbench seperti yang ditunjukkan di bawah ini:
Tabel ORDRE:
CREATE TABLE Ordre (
OrdreID INT NOT NULL,
OrdreDato DATE DEFAULT NULL,
KundeID INT DEFAULT NULL,
CONSTRAINT Ordre_pk PRIMARY KEY (OrdreID),
CONSTRAINT Ordre_fk FOREIGN KEY (KundeID) REFERENCES Kunde (KundeID)
)
ENGINE = InnoDB;
Tabel PRODUKT:
CREATE TABLE Produkt (
ProduktID INT NOT NULL,
ProduktBeskrivelse VARCHAR(100) DEFAULT NULL,
ProduktFarge VARCHAR(20) DEFAULT NULL,
Enhetpris INT DEFAULT NULL,
CONSTRAINT Produkt_pk PRIMARY KEY (ProduktID)
)
ENGINE = InnoDB;
dan tabel ORDRELINJE:
CREATE TABLE Ordrelinje (
Ordre INT NOT NULL,
Produkt INT NOT NULL,
AntallBestilt INT DEFAULT NULL,
CONSTRAINT Ordrelinje_pk PRIMARY KEY (Ordre, Produkt),
CONSTRAINT Ordrelinje_fk FOREIGN KEY (Ordre) REFERENCES Ordre (OrdreID),
CONSTRAINT Ordrelinje_fk1 FOREIGN KEY (Produkt) REFERENCES Produkt (ProduktID)
)
ENGINE = InnoDB;
jadi ketika saya mencoba memasukkan nilai ke dalam ORDRELINJE
tabel saya mendapatkan:
Kode Kesalahan: 1452. Tidak dapat menambah atau memperbarui baris anak: batasan kunci asing gagal (
srdjank
.Ordrelinje
, CONSTRAINTOrdrelinje_fk
FOREIGN KEY (Ordre
) REFERENSIOrdre
(OrdreID
))
Saya telah melihat posting lain tentang topik ini, tetapi tidak berhasil. Apakah saya mengawasi sesuatu atau tahu apa yang harus saya lakukan?
mysql
sql
mariadb
mysql-error-1452
pengguna3289677
sumber
sumber
Jawaban:
Diambil dari Using FOREIGN KEY Constraints
Jadi kesalahan Anda
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
pada dasarnya berarti bahwa, Anda mencoba menambahkan baris keOrdrelinje
tabel Anda yang tidak ada baris yang cocok (OrderID) yang ada dalamOrdre
tabel.Anda harus memasukkan baris ke
Ordre
tabel Anda terlebih dahulu .sumber
Anda mendapatkan pemeriksaan batasan ini karena
Ordre
tabel tidak memiliki referensi yangOrdreID
disediakan dalam perintah sisipkan.Untuk memasukkan nilai
Ordrelinje
, Anda harus terlebih dahulu memasukkan nilai dalamOrdre
tabel dan menggunakan nilai yang samaOrdreID
dalamOrderlinje
tabel.Atau Anda tidak dapat menghapus batasan tidak null dan memasukkan nilai NULL di dalamnya.
sumber
Anda harus menghapus data di tabel anak yang tidak memiliki nilai kunci asing yang sesuai dengan kunci utama tabel induk. Atau hapus semua data dari tabel anak lalu masukkan data baru yang memiliki nilai kunci asing yang sama dengan kunci utama di tabel induk . Seharusnya itu berhasil. Berikut juga video youtube
sumber
Masalahnya adalah dengan Batasan KUNCI ASING. Secara Default (SET FOREIGN_KEY_CHECKS = 1). Opsi FOREIGN_KEY_CHECKS menentukan apakah akan memeriksa batasan kunci asing untuk tabel InnoDB atau tidak. MySQL - SETEL FOREIGN_KEY_CHECKS
Kita dapat mengatur pemeriksaan kunci asing sebagai nonaktif sebelum menjalankan Query. Nonaktifkan kunci Asing .
Jalankan salah satu baris ini sebelum menjalankan kueri Anda, lalu Anda dapat menjalankan kueri Anda dengan sukses. :)
1) Untuk Sesi (disarankan)
2) Secara global
sumber
Kesalahan ini umumnya terjadi karena kita memiliki beberapa nilai di bidang referensi tabel anak, yang tidak ada di bidang referensi / kandidat dari tabel induk.
Terkadang, kita mungkin mendapatkan kesalahan ini ketika kita menerapkan batasan Kunci Asing ke tabel yang ada, yang sudah memiliki data di dalamnya . Beberapa jawaban lain menyarankan untuk menghapus data sepenuhnya dari tabel anak, dan kemudian menerapkan batasannya. Namun, ini bukan pilihan ketika kita sudah memiliki data kerja / produksi di tabel anak. Dalam sebagian besar skenario, kita perlu memperbarui data di tabel anak (daripada menghapusnya).
Sekarang, kita dapat memanfaatkan
Left Join
untuk menemukan semua baris tersebut di tabel anak, yang tidak memiliki nilai yang cocok di tabel induk. Kueri berikut akan membantu untuk mengambil baris yang tidak cocok tersebut:Sekarang, biasanya Anda dapat melakukan satu (atau lebih) langkah-langkah berikut untuk memperbaiki data.
null
juga.Setelah data diperbaiki, kita dapat menerapkan batasan kunci Asing menggunakan
ALTER TABLE
sintaks.sumber
pada tabel foreign key memiliki nilai yang tidak dimiliki pada tabel primary key yang akan di kaitkan, jadi anda harus menghapus semua data terlebih dahulu / menyesuaikan nilai tabel foreign key anda sesuai dengan nilai yang ada di primary key anda
sumber
Saya mendapatkan masalah ini meskipun tabel induk saya memiliki semua nilai yang saya rujuk di tabel anak saya. Masalahnya sepertinya saya tidak dapat menambahkan beberapa referensi turunan ke satu kunci asing. Dengan kata lain, jika saya memiliki lima baris data yang mereferensikan kunci asing yang sama, MySQL hanya mengizinkan saya untuk mengunggah baris pertama dan memberi saya kesalahan 1452.
Yang berhasil bagi saya adalah mengetik kode "SET GLOBAL FOREIGN_KEY_CHECKS = 0". Setelah itu saya menutup MySQL dan kemudian memulainya kembali dan saya dapat mengunggah semua data saya tanpa kesalahan. Saya kemudian mengetik "SET GLOBAL FOREIGN_KEY_CHECKS = 1" untuk mengatur kembali sistem ke normal meskipun saya tidak sepenuhnya yakin apa yang dilakukan FOREIGN_KEY_CHECKS. Semoga ini membantu!
sumber
Ini bisa diperbaiki dengan memasukkan record masing-masing di tabel Parent terlebih dahulu dan kemudian kita bisa memasukkan record ke kolom masing-masing tabel Anak. Periksa juga tipe data dan ukuran kolomnya. Ini harus sama dengan kolom tabel induk, bahkan mesin dan pemeriksaannya juga harus sama. COBA INI! Beginilah cara saya memecahkan masalah saya. Koreksi saya jika salah.
sumber
ORDRELINJE
Tabel Anda ditautkan denganORDER
tabel menggunakan batasan kunci asing yangconstraint Ordrelinje_fk foreign key(Ordre) references Ordre(OrdreID)
sesuai denganOrdre int NOT NULL,
kolom tabel mana yangORDRELINJE
harus cocok denganOrdre int NOT NULL,
kolomORDER
tabel mana pun.Sekarang yang terjadi di sini adalah, saat Anda memasukkan baris baru ke dalam
ORDRELINJE
tabel, menurut batasan fkOrdrelinje_fk
itu memeriksaORDER
tabel jikaOrdreID
ada atau tidak dan karena tidak cocok dengan OrderId, Compiler mengeluh karena pelanggaran kunci asing. Inilah alasan Anda mendapatkan kesalahan ini.Kunci asing adalah kunci utama dari tabel lain yang Anda gunakan di tabel mana pun untuk menghubungkan keduanya. Kunci ini terikat oleh batasan kunci asing yang Anda tentukan saat membuat tabel. Operasi apa pun pada data tidak boleh melanggar batasan ini. Pelanggaran batasan ini dapat mengakibatkan kesalahan seperti ini.
Harap saya jelaskan.
sumber
Saat memasukkan nilai atribut kunci asing, pertama verifikasi jenis atribut, serta nilai atribut kunci utama dalam relasi induk, jika nilai dalam relasi induk cocok, maka Anda dapat dengan mudah memasukkan / memperbarui nilai atribut anak.
sumber
sebaiknya tambahkan data dari REFERENCES KEY di PRIMARY TABLE ke FOREIGN KEY di CHILD TABLE
artinya jangan tambahkan data acak ke foreign key ، gunakan saja data dari primary key yang bisa diakses
deskripsi data dalam kunci asing
sumber
Ini membantu saya setelah membaca @ Mr-Faizan dan jawaban lainnya.
di phpMyAdmin dan tekan kueri. Saya tidak tahu tentang WorkBench tetapi jawaban lain mungkin membantu Anda.
sumber
Anda harus memasukkan setidaknya satu mentah di setiap tabel (yang Anda ingin kunci asing tunjuk) kemudian Anda dapat memasukkan atau memperbarui nilai-nilai kunci asing
sumber
sakit memeras ini di sini: kasus saya mencoba untuk membuat seperti untuk posting yang tidak ada; saat melakukan ke database kesalahan itu muncul. solusinya adalah dengan membuat postingan terlebih dahulu lalu menyukainya. dari pemahaman saya jika post_id akan disimpan di tabel suka harus dicek terlebih dahulu dengan tabel posting untuk memastikan keberadaannya. Saya merasa lebih baik melakukannya dengan cara ini karena menurut saya lebih logis ..
sumber
Saat Anda menggunakan kunci asing , urutan kolom Anda harus sama untuk penyisipan .
Misalnya, jika Anda menambahkan
(userid, password)
di table1 dari table2 kemudian dari table2 agar harus sama(userid, password)
dan tidak seperti(password,userid)
di manauserid
merupakan kunci asing di table2 dari table1 .sumber
Masalah terjadi karena Anda menyetel kunci asing di tabel anak setelah Anda memasukkan beberapa data di tabel anak.
Coba hapus semua data dari tabel anak, kemudian atur kunci asing dan kemudian tambahkan / masukkan data ke dalam tabel, itu akan berfungsi.
sumber
periksa no. dari record pada tabel induk yang sesuai dengan tabel anak dan juga primary key harus sesuai dengan referensi foreign key. Ini berhasil untuk saya.
sumber
100% bekerja ...
ERROR 1452: Tidak dapat menambah atau memperbarui baris anak: batasan kunci asing gagal .... jika jenis kesalahan ini terjadi: maka Pertama-tama buka tabel ini dan periksa pengaturan> jika Mesin adalah: InnoDB kemudian ubah ke MyISAM
(dan hapus batasan asing referensi)
sumber