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?
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