PDA

Bekijk Volledige Versie : Probleem met een AUTO_INCREMENT veld in MySQL



Bas Hendriks
05/06/03, 10:35
Hallo,

We hebben in MySQL een tabel een veld ID die als AUTO_INCREMENT gedefineerd
is(int veld),
als we (voor een wissel) een ID op -1 zetten dan wordt de AUTO_INCREMENT
value de Max int value(2147483647), waardoor er geen items meer toe te
voegen zijn.
Melding: ERROR 1062: Duplicate entry '2147483647' for key 1

Waarom telt mysql niet gewoon verder vanaf het met auto_increment laatste
uitgegeven ID?
Kan ik de auto_increment teller handmatig resetten? (Niet met ALTER TABLE
test AUTO_INCREMENT=20;
e.d. want dat is puur het startpunt)

--
Met vriendelijke groet,
Bas Hendriks

Alain
05/06/03, 10:50
Bas Hendriks schreef:

> als we (voor een wissel) een ID op -1 zetten dan wordt de
> AUTO_INCREMENT value de Max int value(2147483647)
>
> Waarom telt mysql niet gewoon verder vanaf het met
> auto_increment laatste uitgegeven ID?


Misschien omdat MySQL geen negatieve waarde wil in het auto
increment veld?


--
Alain

spamsux.nl

Bas Hendriks
05/06/03, 11:05
> Bas Hendriks schreef:
>
> > als we (voor een wissel) een ID op -1 zetten dan wordt de
> > AUTO_INCREMENT value de Max int value(2147483647)
> >
> > Waarom telt mysql niet gewoon verder vanaf het met
> > auto_increment laatste uitgegeven ID?
>
> Misschien omdat MySQL geen negatieve waarde wil in het auto
> increment veld?
>

Dit kan volgens mij wel(is gewoon een signed integer, dus -2147483648 tot
2147483647 moet kunnen):
#> tabel voor bewerking
mysql> select * from test;
+----+-------+
| no | titel |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 20 | test3 |
| 6 | test7 |
| 5 | test5 |
+----+-------+
5 rows in set (0.00 sec)
#> 1 id -1 maken
mysql> UPDATE test SET no="-1" where no=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from test;
+----+-------+
| no | titel |
+----+-------+
| 1 | test1 |
| -1 | test2 |
| 20 | test3 |
| 6 | test7 |
| 5 | test5 |
+----+-------+
5 rows in set (0.00 sec)

mysql> desc test;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| no | int(16) | | PRI | NULL | auto_increment |
| titel | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

#> nieuwe item toevoegen, dit kan 1 keer, nu wordt maxval voor id gebruikt
mysql> INSERT INTO test VALUES("","test8");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------------+-------+
| no | titel |
+------------+-------+
| 1 | test1 |
| -1 | test2 |
| 20 | test3 |
| 6 | test7 |
| 5 | test5 |
| 2147483647 | test8 |
+------------+-------+
6 rows in set (0.00 sec)

#> waarna je niet meer kan toevoegen

mysql> INSERT INTO test VALUES("","test9");
ERROR 1062: Duplicate entry '2147483647' for key 1
mysql>
(Dit doet zich ook voor als -1 weer teruggezet wordt of verwijderd wordt)

Ik vond wel deze posting:
http://www.geocrawler.com/mail/msg.php3?msg_id=4586681&list=8
Dit lijkt wel hetzelfde probleem, maar kan er verder niet veel mee (geen
myisam meer gebruiken)

Alain
05/06/03, 11:35
Bas Hendriks schreef:

>> Misschien omdat MySQL geen negatieve waarde wil in het
>> auto increment veld?
>>
>
> Dit kan volgens mij wel(is gewoon een signed integer, dus
> -2147483648 tot 2147483647 moet kunnen):


Het veld kan misschien wel een -1 aan, maar mysql kan die
waarsch niet auto incrementen enzo?


--
Alain

spamsux.nl

Igmar Palsenberg
05/06/03, 15:50
Bas Hendriks wrote:

> We hebben in MySQL een tabel een veld ID die als AUTO_INCREMENT gedefineerd
> is(int veld),
> als we (voor een wissel) een ID op -1 zetten dan wordt de AUTO_INCREMENT
> value de Max int value(2147483647), waardoor er geen items meer toe te
> voegen zijn.
> Melding: ERROR 1062: Duplicate entry '2147483647' for key 1

Welke versie van MySQL gebruik je ? Dit is een bug die volgens mij
allang is opgelost.



Igmar

Bas Hendriks
06/06/03, 10:35
> Bas Hendriks wrote:
>
> > We hebben in MySQL een tabel een veld ID die als AUTO_INCREMENT
gedefineerd
> > is(int veld),
> > als we (voor een wissel) een ID op -1 zetten dan wordt de AUTO_INCREMENT
> > value de Max int value(2147483647), waardoor er geen items meer toe te
> > voegen zijn.
> > Melding: ERROR 1062: Duplicate entry '2147483647' for key 1
>
> Welke versie van MySQL gebruik je ? Dit is een bug die volgens mij
> allang is opgelost.
>

Klopt!

Ik had het online gevonden, simpele upgrade zou het moeten verhelpen.
Bedankt folks!

B