AutoIncrement nach fehlerhaften Insert nicht hochzählen lassen.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • AutoIncrement nach fehlerhaften Insert nicht hochzählen lassen.

    Moin moin,

    Ich habe vor einigen Wochen ein Script gebastelt welches mir aus einer API Nachrichten in einer mySqli 5.6 Tabelle schreibt.

    `id` ist wie üblich ein AutoIncrement
    `id2` steht auf Unique um zu prüfen ob der Eintrag aus der Api schon vorhanden ist.

    Jetzt lese ich jeweils 10 Nachrichten aus der Api aus und schiebe diese in meine DB mittels
    'INSERT IGNORE'

    Sind unter den 10 abgefragten Nachrichten z.B. 3 Neue Nachrichten, werden diese hinzugefügt. Weil die ID2 (Unique) noch nicht besetzt ist.

    Das klappt alles ganz primazüglich. Nur.... der Wert für das Auto_Increment wird um 10 weiter hochgezählt obwohl ja 7 Nachrichten verworfen wurden.

    Das ist jetzt zwar nur ein Schönheitsfehler, aber in 3 Jahren habe ich einen 7-Stelligen AI. Und da ich die DB-Abfrage mittels dieser ID generiere, steht diese natürlich in der URL.

    Also kurz gefragt -> "Kann ich das hochzählen der AI bei ungültigen Inserts unterbinden?"

    Cu Susi
    PHP 8.0, MariaDB 10.5 auf U20.04

  • #2
    Scheinbar hat hier niemand eine Antwort drauf. Ich fnide auch keine passende Antwort im Netz. Also muss ich leider eine Abfrage vorschieben.
    So geht's ... dachte nur, es geht etwas eleganter!?

    PHP-Code:
    $sql "SELECT id from t1 where id2 = '".mysqli_real_escape_string($db$story->id)."' LIMIT 1";
        
    $query2 mysqli_query($db$sql) or die(mysqli_error($db));
        if (
    mysqli_num_rows($query2) == 0) {.....} 
    PHP 8.0, MariaDB 10.5 auf U20.04

    Kommentar


    • #3
      Ein guter Suchbegriff dazu ist "INSERT IGNORE prevent auto increment":

      - prevent autoincrement on MYSQL duplicate insert - Stack Overflow
      - Why mysql insert ignore increase autoincrement field? - Stack Overflow
      - mysql - INSERT IGNORE still autoincrements, alternative SQL query? - Stack Overflow

      Für InnoDB scheint eine „Lösung“ zu sein, innodb_autoinc_lock_mode = 0 zu setzen. Aber lies dir in jedem Fall die Details dazu durch.
      Zuletzt geändert von mermshaus; 08.10.2015, 04:31.

      Kommentar

      Lädt...
      X