webForumDet fria alternativet

Skapa rullande ID

8 svar · 422 visningar · startad av mangan

manganMedlem sedan feb. 2003216 inlägg
#1

Hej!

Jag skulle behöva ha ett rullande id i en tabell. Exempel på hur ett id ser ut:

K1234

Med själva rullningen menar jag att det skall ändras enligt följande:

K1234
K1235
K1236
... (nytt år eller dylikt)...
L0001
L0002

Är det möjligt att åstadkomma detta?

Jag använder MySQL databas och PHP om det spelar in.
Är inte riktigt säker på om detta är en ren SQL fråga men jag börjar här iaf.

PaceMedlem sedan juni 20019 024 inlägg
#2

Nej, det är inte möjligt att få ett sådant ID.

Däremot kan du konstruera en egen rutin som utformar ett löpnummer enligt dina önskemål.

Förslagsvis kan du lagra nästkommande löpnummer i en tabell med inställningar (värdet "K001"). När du sedan lägger till en ny rad i tabellen ifråga hämtar du löpnumret från inställningarna, gör de ökningar som behövs och slutligen lägga in raden i tabellen.

manganMedlem sedan feb. 2003216 inlägg
#3

Det är ju samma sak som att hämta högsta idt från tabellen och öka på det. Problemet med en sådan lösning är att man måste garantera att det inte sker två inserts parallellt så man får dubbla id, fel vid insert om idt redan finns.

PaceMedlem sedan juni 20019 024 inlägg
#4

Visst är det så. Om det läggs in många nya rader på kort tid (med millisekunders mellanrum) finns det risk för dubletter. Då är det bättre att låta databasen ta hand om det med sin egen räknare. Då får du göra någon sorts transaktion i stället.

Vad är det du ska använda löpnumrena till?

The_HulkMedlem sedan juni 20031 837 inlägg
#5

använder man transaktioner så kan man ju låsa rader/kolumner/celler m.m. i vissa databaser.
då kan man skapa någon procedur/funktion som kan skapa ID till en. men det beror so msagt vilken SQL-databas man använder

manganMedlem sedan feb. 2003216 inlägg
#6

Det är serienummer på produkter man tillverkar. Indexen måste se sådana ut för det gör dom på redan befintliga produkter.

Hmmm, innoDB stödjer transaktioner i MySQL 4.1, inte sant?
Isf, hur låser jag en hel tabell?
Har kollat lite i manualer men hittar inte hur man låser en hel tabell.

Hade man haft MySQL 5.* så hade man kunnat lägga en trigger som skötte IDt antar jag.

PaceMedlem sedan juni 20019 024 inlägg
#7

Planerar du att lägga in hundratals produkter under loppet av en sekund? Eller ska flera personer lägga in produkter samtidigt?

Om inte, behöver du i det här fallet inte använda dig av transaktioner.

manganMedlem sedan feb. 2003216 inlägg
#8

Det rör sig väl inte om så många samtidigt. Dock vill jag undvika fel så det är därför jag frågar. Man kan ju alltid göra antagandet att det aldrig kommer ske exakt samtidigt men det kan man ju aldrig vara säker på.
Mest därför jag frågade.

CssonMedlem sedan feb. 2000438 inlägg
#9

mangan skrev:

Isf, hur låser jag en hel tabell?
Har kollat lite i manualer men hittar inte hur man låser en hel tabell.

Lock tables.

132 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)