Rumah >pangkalan data >tutorial mysql >Mengapa Saya Mendapat Ralat MySQL 1062: Entri Pendua untuk Kunci Utama Baharu?
Apabila mengubah jadual MySQL untuk menukar kunci utamanya, ada kemungkinan untuk menemui kod ralat 1062: "Entri pendua '0' untuk kunci 'PRIMER.'" Ini berlaku apabila lajur kunci utama yang baru ditetapkan mengandungi pendua nilai.
Punca:
Isu timbul kerana data jadual sedia ada mungkin mempunyai nilai pendua dalam lajur yang sedang ditukar kepada kunci utama. Kekangan PRIMARY KEY memastikan bahawa semua nilai dalam lajur adalah unik. Apabila menambahkan kekangan PRIMARY KEY, MySQL menyemak pendua dan gagal jika wujud.
Penyelesaian:
Untuk mengelakkan kehilangan data dan menangani ralat, ikut langkah berikut:
1. Tambah Auto-Peningkatan pada Lajur Kunci Utama Baharu:
Pastikan lajur kunci utama baharu mempunyai sifat AUTO_INCREMENT:
CREATE TABLE `momento_distribution` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `momento_id` INT(11) NOT NULL, `momento_idmember` INT(11) NOT NULL, `created_at` DATETIME DEFAULT NULL, `updated_at` DATETIME DEFAULT NULL, `unread` TINYINT(1) DEFAULT '1', `accepted` VARCHAR(10) NOT NULL DEFAULT 'pending', `ext_member` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`, `momento_idmember`), KEY `momento_distribution_FI_2` (`momento_idmember`), KEY `accepted` (`accepted`, `ext_member`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Dengan menetapkan sifat AUTO_INCREMENT, MySQL akan menjana secara automatik nilai unik untuk lajur kunci utama baharu, mengelakkan potensi pendua.
2. Tukar Lajur Sedia Ada:
Jika anda telah mencipta lajur kunci utama baharu tanpa sifat AUTO_INCREMENT, anda boleh mengubah suai menggunakan pertanyaan berikut:
ALTER TABLE `momento_distribution` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT, DROP PRIMARY KEY, ADD PRIMARY KEY (`id`);
Pertanyaan ini akan ubah lajur id sedia ada untuk mempunyai sifat AUTO_INCREMENT, lepaskan kekangan kunci utama lama dan tambahkan kekangan kunci utama baharu pada lajur id yang diubah suai.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat MySQL 1062: Entri Pendua untuk Kunci Utama Baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!