function randomUnique(){
return $randomString =rand(0, 9999); //generate random key
}
function insert($uid,$name,$email){
$link = mysqli_connect("localhost", "root", "", "dummy");
$query = "insert into `usertbl`(`uid`,`name`,`email`)
values('".$uid."','".$name."','".$email."');";
if(mysqli_query($link, $query)){
return $rval = 1;
}else if(mysqli_errno($link) == 1062){
insert(randomUnique(),$name,$email);
}else if(mysqli_errno($link != 1062)){
return $rval = 2;// unsuccessful query
}
}
$uid = randomUnique();
$name = "sam";
$email = "[email protected]";
$msg_code = insert ($uid,$name,$email);
echo $msg_code;
Ich habe 4 Spalten in der Tabelle: id
(PK AI), uid
(varchar unique), name
(varchar), email
(varchar). Wenn ich einen neuen Benutzereintrag erstellen will.Ein zufälliger Schlüssel wird mit der Funktion 'randomUnique()' generiert.Und ich habe die Spalte 'id' auf AI gesetzt, so versucht es die Details einzugeben, aber wenn der Schlüssel das wiederholt Die Fehlernummer 1062 wird von mysql zurückgegeben. Alles läuft gut, bis auf die ID-Spalte, die auf AI gesetzt ist. Der Spaltenwert wird einmal übersprungen, wenn ein Schlüssel ein Duplikat ist. Der obige Code ist eine rekursive Funktion, so dass die Anzahl der in der Spalte 'id' übersprungenen Werte direkt proportional zur Häufigkeit ist, mit der die Funktion aufgerufen wird.Mysql Autoinkrement Ausgabe
Beispiel:
id | uid | name | email
1 | 438 | dan | [email protected]
2 | 3688 | nick | [email protected]
4 | 410 | sid | [email protected]
Hier können wir sehen, Nummer 3 übersprungen bcoz entweder Zufallszahl Funktion hat uns eine Nummer 438 oder 3688, die wieder einen Fehler und unsere rekursive Funktion zu werfen neigt einmal die Anzahl Wiederholungen Skipping 3 und 4 nächste Mal bei erfolgreicher Ausführung eingeben.
Ich muss das automatische Inkrement so festlegen, dass es den Wert in die richtige Reihenfolge eingibt. Ich kann die Struktur der Tabelle nicht ändern.
Hinweis: Warum kümmert es dich, wenn eine ID übersprungen wird? sieht für mich einen Code-Geruch aus. –
Ich würde wetten, dass Sie eine Einfügung haben, die eine Schlüsseleinschränkung fehlschlägt (z. B. eine nicht eindeutige Rückgabe von "uniqid"), die den Autoinkrement-Zähler sowohl in Mariadb als auch in Mysql noch inkrementiert. – Rogue
Wenn Ihre Datenbank innodb ist, beziehen Sie sich auf http://stackoverflow.com/questions/17668369/why-does-mysql-skip-some-auto-increment-ids https://dev.mysql.com/doc/refman /5.7/de/innodb-auto-increment-handling.html#innodb-auto-increment-configurable – Bob