habe eine Tabelle mit einem (bisher) serial-Wert. Wg. Offline-Nutzung - Kunde möchte mit Notebooks unterwegs arbeiten, ohne Internetverbindung - kopiere ich die komplette Datenbank inkl. aller Tabellen lokal auf die Notebooks.
Wird jetzt ein neuer Datensatz erzeugt, funktioniert das ab sofort nicht mehr mit Serial. Weder im Büro noch auf den Notebooks, wenn dann die Daten zusammengeführt werden sollen. Also bekommt jeder Benutzer einen Bereich zugeordnet. Serial ist bekanntlich ein 4 Byte Integer, geht also von –2147483648 bis +2.147.483.647.
Den nächsten freien Wert ermittle ich jetzt so für Notebook 1 mit Wertebereich 83 - 10083:
Code: Alles auswählen
select min(id + 1) from ticket WHERE id >= 83 AND id <= 10083 AND id + 1 NOT IN (select id from ticket) LIMIT 1
Alternativ gings auch so:
Code: Alles auswählen
select a.id + 1 from ticket a left outer join ticket b on b.id = a.id + 1 where a.id > 83 AND a.id <= 10083 and b.id is null order by a.id LIMIT 1