Sven Rautenberg: Eigenes "auto_increment id" funktioniert nicht

Beitrag lesen

Moin!

da es bei PHP/MySQL etwas ungünstig ist, dass nach dem Löschen von Einträgen Lücken bei den IDs entstehen, wollte ich das ganze selbst in die Hand nehmen.

Das willst du lieber nicht tun.

Die ID ist nicht zum Sortieren da, und sie ist auch nicht konstruiert, um fortlaufend und ohne Lücken zu entstehen oder dies später zu sein.

Sie dient dazu, beim Anlegen und bei späteren Zugriffen auf den Datensatz diesen EINDEUTIG zu identifizieren.

Das Problem bei deinem Ersatzcode: Er ist nicht mehrbenutzertauglich. Wenn zwei Prozesse gleichzeitig einen neuen Datensatz anlegen wollen, kann es sein, dass sie nacheinander jeweils erst die erste Datenbankabfrage ausführen, und dann die zweite. Bei der ersten Abfrage erhalten beide die Information, dass die maximale ID z.B. 23 ist, sie also mit ID 24 weitermachen können. Wenn man aber zwei Datensätze mit ID 24 einfügt, gibt das Müll. Es wird zwar kein Datensatz vom anderen überschrieben, aber die Dopplung haut dir die DB mit Sicherheit durcheinander.


mysql_query("SELECT MAX (id) + 1 as maxid FROM $db_table");

mysql_query("INSERT INTO $db_table (id, ip) VALUES ('$maxid', '$my_ip')");

Informiere dich über den Sinn und die Wichtigkeit einer eindeutigen ID mit auto_increment:
http://www.dclp-faq.de/q/q-mysql-auto-increment.html
http://www.dclp-faq.de/q/q-mysql-inkrement.html
http://www.dclp-faq.de/q/q-sql-ids.html

- Sven Rautenberg

--
SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|