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
Lepaskan: 2024-12-27 13:53:09
asal
235 orang telah melayarinya

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;
Salin selepas log masuk

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`);
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan