Masalah dengan tidak dapat menetapkan lajur kepada kenaikan automatik wujud dalam MySql
P粉998100648
2023-08-22 16:23:53
<p>Saya mempunyai jadual bernama "Bestelling" dengan 4 lajur: "Id" (kunci utama), "KlantId", "Datum", "BestellingsTypeId", kini saya mahu Id lajur ditambah secara automatik, tetapi, Apabila Saya cuba melakukan ini saya mendapat ralat berikut: </p>
<pre class="brush:php;toolbar:false;">ERROR 1062: ALTER TABLE menyebabkan penyusunan semula kenaikan automatik, menghasilkan entri pendua '1' untuk kunci utama 'PRIMER'
pernyataan SQL:
ALTER JADUAL `aafest`.`aafest_bestelling` TUKAR COLUMN `Id` `Id` INT(11) BUKAN NULL AUTO_INCREMENT
RALAT: Ralat berlaku semasa menjalankan skrip rollback. Butiran ada di bawah.
RALAT 1046: Tiada pangkalan data dipilih
pernyataan SQL:
BUAT JADUAL `aafest_bestelling` (
`Id` int(11) BUKAN NULL,
`KlantId` int(11) DEFAULT NULL,
`Datum` tarikh LALAI NULL,
`BestellingstypeId` int(11) DEFAULT NULL,
KUNCI UTAMA (`Id`)
) ENJIN=CHARSET LALAI InnoDB=latin1</pre>
<p>Adakah sesiapa mempunyai sebarang idea? </p>
Saya juga mengalami masalah ini apabila saya cuba menukar lajur kepada auto_increment, salah satu baris mempunyai nilai 0. Alternatifnya ialah dengan menetapkan:
Untuk menyediakan sesi.
Ini akan menukar lajur kepada auto_increment dengan ID sifar.
Sifar tidak sesuai dan saya tidak mengesyorkan menggunakannya dalam lajur auto_increment. Malangnya, ia adalah sebahagian daripada set data yang diwarisi, jadi saya tidak boleh mengubahnya buat masa ini.
Sebaik-baiknya mengosongkan tetapan (dan tetapan lain) selepas itu:
Walaupun ia akan dikosongkan apabila sesi pelanggan semasa ditutup.
Butiran penuh tentang tetapan 'NO_AUTO_VALUE_ON_ZERO' di sini.
Ini berlaku jika jadual mengandungi rekod sedia ada dengan id 0 (atau nombor negatif). Mengemas kini semua rekod sedia ada untuk menggunakan nilai positif akan membolehkan auto_increment ditetapkan pada lajur itu.
Sunting: Sesetengah orang bertanya bagaimana 0 muncul. Untuk menjelaskannya, Manual Rujukan MySQL menyatakan, "Untuk jenis angka, nilai lalai ialah 0, tetapi untuk jenis integer atau titik terapung dengan atribut AUTO_INCREMENT, nilai lalai ialah nilai seterusnya dalam jujukan." ini sebelum mendayakan auto_increment, Apabila melakukan sisipan pada jadual tanpa memberikan nilai untuk lajur angka, nilai lalai 0 digunakan semasa sisipan. Butiran lanjut boleh didapati di https://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html.