Pernyataan ALTER MySQL membolehkan anda mengubah suai takrif jadual, termasuk menambah kunci unik. Sambungan kata kunci IGNORE membolehkan penyingkiran baris pendua semasa operasi ini. Walau bagaimanapun, pengguna telah melaporkan menghadapi ralat "Pelanggaran kekangan integriti" walaupun semasa menggunakan IGNORE.
Isu:
Apabila melaksanakan pernyataan ALTER IGNORE TABLE untuk mengalih keluar pendua berdasarkan kunci unik, ralat "Pelanggaran kekangan integriti" masih ditemui, bercanggah dengan dakwaan dokumentasi bahawa IGNORE menghalang ralat ini.
Punca:
Sambungan kata kunci IGNORE nampaknya mempunyai pepijat dalam InnoDB enjin pada versi MySQL tertentu, mengakibatkan ralat.
Penyelesaian:
Untuk memintas isu ini, anda boleh menukar jadual kepada MyISAM buat sementara waktu, tambah indeks unik menggunakan IGNORE, dan kemudian tukarkannya semula kepada InnoDB.
ALTER TABLE table ENGINE MyISAM; ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field); ALTER TABLE table ENGINE InnoDB;
Nota: Jika terdapat kekangan kunci asing, anda mesti mengalih keluarnya terlebih dahulu dan menambahnya semula selepas penukaran.
Atas ialah kandungan terperinci Mengapa ALTER IGNORE TABLE Gagal dengan Pelanggaran Kekangan Integriti Walaupun Menggunakan IGNORE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!