Rumah >pangkalan data >tutorial mysql >Mengapa Saya Mendapat Ralat MySQL 1062: Entri Pendua untuk Kunci Utama Baharu?

Mengapa Saya Mendapat Ralat MySQL 1062: Entri Pendua untuk Kunci Utama Baharu?

Linda Hamilton
Linda Hamiltonasal
2024-12-27 13:53:09182semak imbas

Why Am I Getting MySQL Error 1062: Duplicate Entry for a New Primary Key?

Ralat MySQL 1062: Kemasukan 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn