2016-11-14 2 views
-1

Ich muss ständig den AUTO_INCREMENT-Wert meiner Tabellen "zurücksetzen", nachdem ich einen Teil meiner Zeilen gelöscht habe. Lassen Sie mich mit einem konkreten Beispiel erklären:MySQL gesetzt AUTO_INCREMENT Wert auf MAX (ID) + 1 Verknüpfung?

Ich habe eine Tabelle mit dem Namen CLIENT. Nehmen wir an, vor dem Entfernen einiger Zeilen wurde auto_increment auf 11 gesetzt. Dann lösche ich die 4 Leistenzeilen. Das auto_increment ist immer noch auf 11 gesetzt. Wenn ich also wieder einige Clients einfüge, wird es ein Loch von id machen.

Ich muss immer das Auto_increment, z. Mit dieser Funktion unter:

function cleanAutoIncrement($tableName, $columnAutoIncrement, $pdo) 
{ 
    $r = false; 

    try { 
     $p = $pdo->prepare("SELECT IFNULL(MAX($columnAutoIncrement) + 1, 1) AS 'max' FROM $tableName LIMIT 1;"); 
     $p->execute(); 

     $max = $p->fetch(PDO::FETCH_ASSOC)['max']; 

     $p = $pdo->prepare("ALTER TABLE $tableName AUTO_INCREMENT = $max;"): 

     $p->execute(); 

     $r = true; 
    } 
    catch(Exception $e) { 
     $r = false; 
    } 

    return $r; 
} 

Was tut die Funktion ist die maximale id in der Tabelle zu erhalten, erhöht ihn dann von 1, und gibt dessen Wert (wenn es keine Zeilen in der Tabelle ist es 1 zurück). Dann ändere ich die Tabelle, um eine "saubere" ID zurückzusetzen, um kein Loch von id zu lassen.

FRAGE

Gibt es eine MySQL-Befehl um diese Aufgabe auszuführen, ohne dass dies manuell zu tun zu haben?

+2

wurde oft gefragt, Lücken in Sequenzen ist kein Problem wert, um – e4c5

+1

zu beachten Die einzige Möglichkeit, dass MySQL den Zähler einer Auto-Inkrement-Spalte in einer Tabelle zurücksetzen ** ist ** die Tabelle abgeschnitten (was ist nicht was du willst). Zweitens stimme ich @ e4c5 uneingeschränkt zu. Warum sollte es wichtig sein, dass die IDs immer ohne Lücken laufen? – FDavidov

+0

Aus welchem ​​Grund brauchen Sie keine Lücken zwischen Ihren IDs? Wie @ e4c5 erwähnt, ist es unvermeidlich, keine Lücken in _auto increment IDs_ zu haben. Wenn Sie ein solches Feld benötigen, ist es besser, ein anderes ganzzahliges Feld zu erstellen und es manuell zu berechnen/zu generieren (was ich Ihnen dringend rate, es zu vermeiden!) – EhsanT

Antwort

0

Um diese Frage zu schließen, gibt es keine Verknüpfung in MySQL und es wird nicht empfohlen, diese Aufgabe auszuführen.

Verwandte Themen