Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MySQL: Doppelte auto_incement-Einträge?

1 view
Skip to first unread message

Sandra Berger

unread,
Jan 3, 2010, 10:35:44 AM1/3/10
to
MySQL

Habe eine Tabelle mit ID = auto_increment

- Pl�tzlich taucht der Datensatz ID=127 mehrfach auf.
- Pl�tzlich lassen sich keine Datens�tze mehr anf�gen.

Nach �nderung des Feldtyps f�r ID von TINYINT auf INT kann ich wieder
Datens�tze anf�gen, die doppelten 127er-Datensatz sind jedoch nach wie vor
vorhanden - und lassen (�ber phpMyAdmin) sich nicht l�schen (l�schen wird
zwar best�tigt, die Datens�tze sind aber noch wie vor vorhanden).

Hat jemand eine Erkl�rung und/oder einen Tipp, wie ich meine Tabelle wieder
sauber bekomme?


Thomas Rachel

unread,
Jan 3, 2010, 12:48:23 PM1/3/10
to
Am 03.01.2010 16:35, schrieb Sandra Berger:
> MySQL
>
> Habe eine Tabelle mit ID = auto_increment
>
> - Plötzlich taucht der Datensatz ID=127 mehrfach auf.
> - Plötzlich lassen sich keine Datensätze mehr anfügen.
>
> Nach Änderung des Feldtyps für ID von TINYINT auf INT kann ich wieder
> Datensätze anfügen,

ok. Daß TINYINT nur is 127 (bzw. im Fall von UNSIGNED bis 255) geht,
sollte klar sein. Änderung auf INT löst dieses Problem zunächst.

> die doppelten 127er-Datensatz sind jedoch nach wie vor

> vorhanden - und lassen (über phpMyAdmin) sich nicht löschen (löschen wird
> zwar bestätigt, die Datensätze sind aber noch wie vor vorhanden).

Das könnte einer der Fälle sein, wo phpMyAdmin zu Recht verteufelt wird ;-)

Fehlermeldung gibts keine? Ansonsten könnte folgendes funktionieren:

create /* temporary */ table t select * from <kaputte Tabelle> LIMIT 0;
alter table t auto_increment=127;
insert into t (<Felder>) select <Felder> from <kaputte tabelle> order by ID;

Danach solltest Du Dir die Tabelle t mal anzeigen lassen. Sie sollte
alle Einträge aus der Originaltabelle mit korrigierten ID-Feldern
enthalten, wenn Du im 3. Statement oben <Felder> durch alle Felder der
Originaltabelle ersetzt wird mit Ausnahme von ID.


Andere Möglichkeit wäre:

SHOW CREATE TABLE tabelle; -- -> hier gucken, wie ID definiert ist
ALTER TABLE tabelle DROP COLUMN ID;
ALTER TABLE tabelle ADD COLUMN ID <so wie sie vorher war>;

Das löscht die Spalte und erstellt sie neu.


Achtung: Beide Verfahren sollten nur eingesetzt werden, wenn die
Datenbank noch nicht produktiv eingesetzt wird und wenn noch keine
Fremdschlüsselbeziehungen bestehen, da die ursprüngliche Reihenfolge
vermutlich verlorengeht.


Thomas

0 new messages