This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
sql:snippets:firstnotusedid [09.12.2013 09:39:54] 127.0.0.1 external edit |
sql:snippets:firstnotusedid [31.03.2016 09:20:46] (current) yaslaw |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ======[MySQL] First not used Id====== | + | ======[SQL] First not used Id====== |
Erste freie ID einer Tabelle ermitteln | Erste freie ID einer Tabelle ermitteln | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | ACHTUNG! | ||
+ | Eignet sich nicht um in einer Multiuser-Umgebung die IDs zu vergeben, da zwischen ID auslesen und neuen Beitrag posten jemand anderes die ID besetzen kann. | ||
+ | </WRAP> | ||
+ | |||
===== Ausgangslage ===== | ===== Ausgangslage ===== | ||
Line 10: | Line 16: | ||
MIN(newIds.newId) AS firstNotUsedId | MIN(newIds.newId) AS firstNotUsedId | ||
FROM | FROM | ||
- | # jeweils die nächst höhere ID ermitteln | + | -- jeweils die nächst höhere ID ermitteln |
(SELECT id + 1 AS newId FROM test) AS newIds | (SELECT id + 1 AS newId FROM test) AS newIds | ||
- | # und mit der Tabelle zurückverknüpfen | + | -- und mit der Tabelle zurückverknüpfen |
LEFT JOIN (SELECT id FROM test ) AS ids | LEFT JOIN (SELECT id FROM test ) AS ids | ||
ON newIds.newId = ids.id | ON newIds.newId = ids.id | ||
Line 25: | Line 31: | ||
An diese hänge ich die Tabelle mittels eines LEFT JOIN | An diese hänge ich die Tabelle mittels eines LEFT JOIN | ||
Daraus nehme ich alle newId die in der Tabelle nicht als ID bestehen. | Daraus nehme ich alle newId die in der Tabelle nicht als ID bestehen. | ||
- | Zuguter letzt lese ich mit min() die klienste daraus aus. | + | Zuguter letzt lese ich mit min() die kleinste daraus aus. |
- | >ACHTUNG! | ||
- | >Eignet sich nicht um in einer Multiuser-Umgebung die IDs zu vergeben, da zwieschen ID auslesen und neuen Beitrag posten jemand anderes die ID besetzen kann. | ||
{{tag>MySQL}} | {{tag>MySQL}} | ||
+ | |||
+ | ===== Spielwiese ===== | ||
+ | [[http://sqlfiddle.com/#!2/68751c/1|Beispiel bei sqlfiddle.com]] |