Was doppeltes IDs auf einem Autoinkrement Primärschlüsselfeld (mysql) verursachen könnte?

StackOverflow https://stackoverflow.com/questions/514018

  •  21-08-2019
  •  | 
  •  

Frage

RESOLVED

Von der Entwickler: Das Problem war, dass eine frühere Version des Codes noch auf dem Tisch zu schreiben, die eine manuelle ids verwendet anstelle der Autoinkrement. Notiz an mich selbst:. Immer überprüfen, für andere mögliche Standorte, an denen die Tabelle geschrieben

Wir bekommen doppelte Schlüssel in einer Tabelle. Sie sind nicht in der gleichen Zeit (6 Stunden auseinander) eingefügt.

Tabellenstruktur:

CREATE TABLE `table_1` (
  `sales_id` int(10) unsigned NOT NULL auto_increment,
  `sales_revisions_id` int(10) unsigned NOT NULL default '0',
  `sales_name` varchar(50) default NULL,
  `recycle_id` int(10) unsigned default NULL,
  PRIMARY KEY  (`sales_id`),
  KEY `sales_revisions_id` (`sales_revisions_id`),
  KEY `sales_id` (`sales_id`),
  KEY `recycle_id` (`recycle_id`)
) ENGINE= MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=26759 ;

Der Einsatz:

insert into `table_1` ( `sales_name` ) VALUES ( "Blah Blah" )

Wir laufen MySQL 5.0.20 mit PHP5 und mit mysql_insert_id () um den Einsatz ID unmittelbar nach dem Einsatz Abfrage abgerufen werden.

War es hilfreich?

Lösung

plötzlich ein paar doppelten Schlüssel Fehler erscheinen in MySQL-Datenbanken in der Vergangenheit, auch wenn der Primärschlüssel definiert ist und auto_increment

Ich hatte. Jedes Mal, es war, weil der Tisch beschädigt werden.

Wenn es beschädigt ist eine Prüftabellen Durchführung sollte das Problem aus. Sie können dies tun, indem Sie:

CHECK TABLE tbl_name

Wenn es in irgendeiner Weise wieder als korrupt kommt (wird in der Regel sagen, dass die Größe größer ist, als es eigentlich sein sollte), dann führen Sie einfach die folgenden, sie zu reparieren:

REPAIR TABLE tbl_name

Andere Tipps

Hat das sales_id Feld hat einen primären (oder eindeutigen) Schlüssel? Wenn nicht, dann ist etwas anderes wahrscheinlich machen Einsätze oder Updates, die existieren Zahlen wiederverwenden. Und durch „etwas anderes“ meine ich nicht nur Code; es könnte tut es aus Versehen ein Mensch mit Zugang zu der Datenbank sein.

Wie die anderen gesagt; mit Ihrem Beispiel ist es nicht möglich.

Es ist in keinem Zusammenhang mit Ihrer Frage, aber Sie haben keine separate Taste für die Primärschlüsselspalt zu machen - einfach ist das Hinzufügen eines zusätzlichen nicht-eindeutigen Index auf den Tisch, wenn Sie bereits über den einzigartigen (primären) Schlüssel.

  

Wir bekommen doppelte Schlüssel in einer Tabelle.

Haben Sie meinen, Sie werden immer Fehler, wie Sie einfügen versuchen zu wollen, oder Sie meinen Sie einige Werte in der Spalte mehr als einmal gespeichert haben?

Auto-Zuwachs tritt erst ein, wenn Sie die Spalte aus Ihrem INSERT weglassen, oder versuchen, NULL oder Null einzufügen. Ansonsten können Sie einen Wert in einer INSERT-Anweisung angeben, über-Reiten den Autoinkrement-Mechanismus. Zum Beispiel:

INSERT INTO table_1 (sales_id) VALUES (26759);

Wenn der Wert bereits in der Tabelle vorhanden angeben, erhalten Sie eine Fehlermeldung erhalten.

Bitte senden Sie die Ergebnisse dieser Abfrage:

SELECT `sales_id`, COUNT(*) AS `num`
FROM `table_1`
GROUP BY `sales_id`
HAVING `num` > 1
ORDER BY `num` DESC
  • Wenn Sie einen eindeutigen Schlüssel auf anderen Gebieten haben, dass das Problem sein könnte.

  • Wenn Sie den höchsten Wert für Ihre auto_increment Spalte MySQL versuchen, halten sie wieder einsetzen erreicht haben. Zum Beispiel, wenn sales_id eine Tinyint Spalte ist, würden Sie doppelte Schlüssel Fehler erhalten, nachdem Sie id 127 erreicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top