Masalah dengan tidak dapat menetapkan lajur kepada kenaikan automatik wujud dalam MySql
P粉998100648
P粉998100648 2023-08-22 16:23:53
0
2
567
<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>
P粉998100648
P粉998100648

membalas semua(2)
P粉391677921

Saya juga mengalami masalah ini apabila saya cuba menukar lajur kepada auto_increment, salah satu baris mempunyai nilai 0. Alternatifnya ialah dengan menetapkan:

SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';

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:

SET SESSION sql_mode='';

Walaupun ia akan dikosongkan apabila sesi pelanggan semasa ditutup.

Butiran penuh tentang tetapan 'NO_AUTO_VALUE_ON_ZERO' di sini.

P粉146080556

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!