Nach Hause
Top.Mail.Ru Yandeks.Metrika
Forum: "Grundlagen";
Aktuelles Archiv: 2002.01.08;
Herunterladen: [xml.tar.bz2];

Nach unten

Bestimmen Sie die erste freie ID Finden Sie ähnliche Zweige


S_King   (2001-12-04 10:18) [0]

Hilfeassistenten zur Ermittlung der freien 1-Nummer in der gespeicherten Prozedur? Wir haben eine Tabelle mit einem gefüllten Feld (1,2,4,5 ...), d.h. Die Prozedur sollte 3 ausgeben.



Vadim   (2001-12-04 10:51) [1]

Nur "schief" - Suche in Zeilen oder mit Hilfe einer Hilfstabelle. Vielleicht können Sie die Aufgabe anders einstellen?



Владислав   (2001-12-04 10:57) [2]

Treffen Sie eine Auswahl, aufsteigend sortiert. Durchsuchen Sie alle Datensätze (naja, nicht alle, aber bis Sie die gewünschte Nummer gefunden haben) und finden Sie, was Sie brauchen und verwenden.

Nur wenn Sie eine eindeutige Nummer erhalten möchten, ist dies nicht die beste (und möglicherweise die schlechteste) Option. Stellen Sie sich vor, was passiert, wenn zwei Benutzer gleichzeitig eine solche Nummer erhalten.



Yuvich   (2001-12-04 16:11) [3]

Wenn die Aufgabe genau so ist, müssen Sie die von Vladislav beschriebene Situation beseitigen ("Stellen Sie sich vor, was passiert, wenn zwei Benutzer gleichzeitig eine solche Nummer erhalten."). Wenden Sie an, was Vadim vorschlägt ("mithilfe einer Hilfstabelle").

Hilfstisch ist eine Liste von "Löchern" in den Räumen. Wie das Loch geformt wurde - es wurde in diese Tabelle eingefügt; wie man das loch füllt - lese die mindestanzahl aus dieser tabelle und lösche diese nummer aus dieser tabelle. Alles geschieht in Triggern und wenn die "Hole Table" gesperrt ist, werden zwei Benutzer niemals dieselbe Nummer lesen. Wenn die Berechnungsmethode verwendet wird, müssen Sie die gesamte "Zieltabelle" blockieren - was für andere Benutzer, die die Daten einfach lesen können, schlecht ist.



S_King   (2001-12-04 16:43) [4]

All dies ist verständlich, aber es kann möglich sein, durch den Zyklus zu scrollen.
von 1 bis max (Id) im Laden. verfahren?

P / S: Entschuldigung, es könnte eine schlecht formulierte Frage sein.



Vadim   (2001-12-04 16:52) [5]

Es ist möglich, aber es gibt ein "aber": Es ist nicht garantiert, dass zwei Benutzer nicht gleichzeitig mit dem "Schleudern des Zyklus" beginnen und nicht über dasselbe "Loch" stolpern (ich persönlich schätze diese Wahrscheinlichkeit als sehr hoch ein). Wenn dies nach dem Zustand des Problems zulässig ist, fahren Sie fort, wenn nicht, siehe oben.



dmitryK   (2001-12-04 17:12) [6]

Wenn Sie einen SQL-Server verwenden, ist es logisch, solche Probleme mit einer SQL-Abfrage zu lösen, d. H. ungefähr so

Wählen Sie min (t1.ID) + 1
von tabX t1 links trete tabX t2 auf t1.ID = t2.ID + 1 bei
Dabei ist t2.ID NULL

es wird immer noch schneller funktionieren als Brute Force. Und das können Sie auch mit Hilfe des Remote Entry Logs umsetzen. Sie legen den Auslöser auf, um den Datensatz (vorher) zu löschen, und speichern die gesamte ID der gelöschten Datensätze in einer separaten Tabelle. In diesem Fall entsteht beim Hinzufügen neuer Datensätze praktisch kein Zeitverlust für die Suche (kritisch beim gleichzeitigen Hinzufügen einer großen Anzahl von Datensätzen). Damit nicht zwei Benutzer eine ID erfassen und Sie dem Datensatz in einer Transaktion einen Eintrag hinzufügen.



S_King   (2001-12-05 09:55) [7]

Sorry Leute, aber ich habe nicht nach mehreren Usern gefragt ...
Aber wie macht man einen Zyklus für eine einzelne Tabelle?



dmitryK   (2001-12-05 10:49) [8]

Etwas jetzt verstehe ich nicht, du hast gefragt, wie man die minimale freie ID findet. Ich habe Sie gefragt, wie es geht. Warum, fragt man sich, muss man auch einen Zyklus organisieren ????



S_King   (2001-12-05 11:21) [9]

Ich habe den Abfragetext nicht verstanden. Ist es möglich, ihn für dieselbe Tabelle zu erstellen?



dmitryK   (2001-12-05 12:33) [10]

Wählen Sie min (t1.ID) + 1
von tabX t1 links trete tabX t2 auf t1.ID = t2.ID + 1 bei
Dabei ist t2.ID NULL

tabX - das ist dein Tisch. Sie vereint sich. Als Ergebnis erhalten Sie eine Anfrage, die zwei Spalten mit der ID enthält
die erste ist alle IDs in Ihrer Tabelle,
das zweite - wenn ID + 1 ist, dann ist sein Wert, wenn nicht, dann NULL

Wobei t2.ID NULL ist - Lässt nur diejenigen übrig, bei denen die zweite Spalte NULL ist, d. h. ID + 1 frei.

min (t1.ID) + 1 - gibt die minimale freie ID-Nummer zurück.

Lesen Sie mehr über die Beschreibung der SQL-Sprache.

Eine solche Anforderung hat nur einen Nachteil, es muss mindestens ein Datensatz in der Tabelle vorhanden sein, und die freie ID-Nummer ist immer größer als die Mindestbelegung.
Aber das ist eine andere Geschichte ...



S_King   (2001-12-05 16:32) [11]

Ich weiß nicht warum, aber ich habe diese Abfrage hängt die Datenbank zu Tode.
versucht in Trost, Experte



Seiten: 1 ganze Branche

Forum: "Grundlagen";
Aktuelles Archiv: 2002.01.08;
Herunterladen: [xml.tar.bz2];

nach oben









Speicher: 0.85 MB
Zeit: 0.037 c
14-22362
Mifi
2001-11-04 02:34
2002.01.08
Wie finde ich eine Person?


6-22279
Denis
2001-07-28 22:08
2002.01.08
NMSMTP über Proxy


14-22384
Fremd
2001-11-07 08:13
2002.01.08
TV-6-Fans und Shows


1-22154
Yachthafen
2001-12-20 15:42
2002.01.08
Verzeichnisinhalt löschen


1-22001
Socol
2001-12-15 15:55
2002.01.08
Anatoly podgoretsky





Afrikanisch Albanien Arabisch Armenisch Aserbaidschanisch Baskisch Weißrusse Bulgarian katalanisch Chinesisch (vereinfacht) Chinesische Tradition) kroatisch Tschechisch Dänisch Dutch Englisch estnisch Philippinisch Finnish Französisch
Galicisch Georgisch Deutsch Griechisch haitian Creole Hebräisch Hindi ungarisch isländisch Indonesian irisch Italian Japanisch Koreanisch lettisch litauisch Makedonisch Malay Maltesisch Norwegian
persisch Polnisch Portugiesisch Rumänisch Russisch serbisch Slovakisch Slowenisch Spanisch Suaheli Swedish Thai Türkisch Ukrainisch Urdu Vietnamesisch Walisisch Jiddisch Bengalisch bosnisch
cebuano Esperanto Gujarati Hausa Hmong igbo Javanisch kannada khmer Laotisch Lateinisch Maorisch Marathi Mongolisch nepali Pandschabi Somalisch Tamilisch Telugu Yoruba
Zulu
Английский Französisch Deutsch Italienisch Португальский Russisch Spanisch