Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 09:13:59 - Niklas Jansson, i forum databaser, Tråden har 8 Kommentarer och lästs av 1680 personer

Vidareutvecklar ett befintligt system, och har stött på en hel del varianter av en ganska vanlig grej.
Låt säga att vi har en tabell a, med lite fält b, c, d och ID. ID är primary key.

Vi kan därför göra en INSERT INTO a(b,c,d) VALUES("b", 124, "apa"). Id kommer få ett unikt värde.

Men vilka garantier kan vi då få på ID:t?
Eller, formulerat på ett annat sätt, hur kan vi få fram Id:t efteråt?

Jag har sett en variant som i princip gick ut på att hämta upp den som passade bäst:

SELECT ID FROM a WHERE b = "b" AND c=124 AND d="apa"

Känns mycket otrevligt.

Och ytterligare en som går på "senaste"; låt säga att c ovan är en foreign key.

SELECT ID FROM a WHERE c=124 ORDER BY ID DESC.

Och sen väljer man första.
Känns inte heller helt bra, men om man har en garanti att de alltid ökar, så...


Det mest rimliga är väl att använda databasens "inbyggda sätt" för att få fram Idt?
typ "select @@identity" heter det väl för någon?
Problemet där är ju att vi kommer arbeta mot många olika databassystem.

Eller själv bestämma id:t först. Typ:
ID = SQL(SELECT Max(id) + 1 FROM ...)
eller
ID = SQL(SELECT id FROM ((SELECT id+1 AS ID FROM a) EXCEPT (SELECT id FROM a)) ORDER BY id ASC)
och sen använda det första (eller motsvarande sats med subquery)?

Tror väl inte direkt att jag kommer satsa på att skriva om alla äldre funktioner, men jag tyckte det var märkligt.


Svara

Sv: Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 11:17:46 - Emma Magnusson

@@identity är det bästa sättet att göra det på... För jag antar att du anropar en stored procedure av något slag?

Gör du det innifrån programkoden och många uppdaterar samtidigt så kan du (i extremfall) få fel @@identity tillbaka, dvs identity på det någon annan lade till innan du hann köra ditt kommando.

/Emma


Svara

Sv:Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 11:27:23 - Niklas Jansson

Nej, "jag" anropar inga stored procedures. Det är dock i en transaktion.

Problemet med @@identity är ju att oracle knappast har det?
Och hur är det med access?

Möjligtvis då styra vad det står utifrån databastyp, men det är inte heller särskilt behagligt...


Svara

Sv: Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 13:23:30 - Johan Djupmarker

@@IDENTITY fungerar i MSSQL, Access och MySQL. Hur det ligger till i t.ex. Oracle vet jag inte.

Du kan inte få "någon annans" värde med @@IDENTITY om du inte har någon konstig lösning där flera användare delar connection. Om du däremot kör med MAX(ID) osv är det däremot en viss risk att du får fel.

Problemet med @@IDENTITY är om man har en trigger på tabellen som du gör insert i som i sin tur gör en ny insert. I MSSQL finns det en funktion som heter något i stil med scoope_identity som man ska använda istället då.

/Johan


Svara

Sv:Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 13:35:59 - Niklas Jansson

<b>>Om du däremot kör med MAX(ID) osv är det däremot en viss risk att du får fel.</b>
Men inte om det är i en transaktion, väl?


Svara

Sv:Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 13:52:10 - Lars Berg

I oracle använder man sekvenser för att skapa unika värden. Det finns funktioner som heter nextval och curval för att skapa nytt värde och hämta aktuellt värde respektive.


Svara

Sv: Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 13:58:42 - Niklas Jansson

Då är ju den metoden mer eller mindre utesluten för mig. Men är det så att primary keys enligt sql-standarden hela tiden ska öka?


Svara

Sv:Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 14:59:23 - Johan Djupmarker

<b>Men inte om det är i en transaktion, väl?</b>

Helt rätt, tänkte inte på det...

<b>Då är ju den metoden mer eller mindre utesluten för mig. Men är det så att primary keys enligt sql-standarden hela tiden ska öka?</b>

En vild gissning, jag har svårt att tro det då det är valbart hur serverien ska "se ut" i t.ex. MSSQL.

/Johan


Svara

Sv: Garanti för att nya Id alltid ökar?

Postades av 2006-07-10 15:02:02 - Niklas Jansson

Ok, då kan jag enkelt uttryckt vara ganska säker på att den gamla koden någon gång kommer att smälla...

Tror inte det är aktuellt att försöka ordna upp den heller, alldeles för utspridd kod. Nåväl -- that's life.


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 613
27 958
271 741
5 854
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies