Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MySQL Zeilenindex (https://www.delphipraxis.net/191665-mysql-zeilenindex.html)

tomkupitz 7. Feb 2017 21:05

Datenbank: MySQL • Version: 5.7 • Zugriff über: Delphi (API)

MySQL Zeilenindex
 
Hallo,

habe hier eine Tabelle:

Id Text
0 abc
1 lmn
2 xyz

Bisher habe ich eine Zeile ausgelesen oder gelöscht mit:

SELECT * FROM Tabelle1 WHERE Id = 0 //hier also die Zeile mit Id=0 und auch Index=0

Nun habe ich die Tabelle so verändert:

Id Text
1 lmn
2 xyz

Mit obiger Query findet er die Zeile jetzt natürlich nicht mehr. Wie kann ich im Query angeben, das ich die Zeile mit dem Index=0 (1 lmn, also erste Zeile der Tabelle) auslesen oder löschen will?

Danke und beste Grüße

Bernhard Geyer 7. Feb 2017 21:16

AW: MySQL Zeilenindex
 
definiere was für dich die erste Zeile in dieser Tabelle definiert?
Ich vermute den Eintrag mit dem kleinsten Wert für die Spalte ID

also

Code:
select min(id) from tabelle1
damit ist der Löschbefehl

Code:
delete from tabelle1 where id = (select min(id) from tabelle1

tomkupitz 7. Feb 2017 21:28

AW: MySQL Zeilenindex
 
Zitat:

definiere was für dich die erste Zeile in dieser Tabelle definiert?
Ich vermute den Eintrag mit dem kleinsten Wert für die Spalte ID
genau.

Ich baue die Id so: 'CREATE TABLE '+TableName+'(id INT NOT NULL AUTO_INCREMENT, '...
Somit wird die id immer aufsteigend sein (da ich sie nie selber setze). Also ist select min(id) from tabelle1 die Lösung.

Danke und beste Grüße

p80286 7. Feb 2017 21:33

AW: MySQL Zeilenindex
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1361067)
definiere was für dich die erste Zeile in dieser Tabelle definiert?

Das ist ja sehr zurückhaltend formuliert. Eine Tabelle ist ein ungeordnetes Sammelsurium von Datensätzen/Werten. Je nachdem wie auf sie zugegriffen werden soll, werden Indices eingerichtet und jeder Index zeigt auf einen kleinsten Wert, der aber nicht zwangsläufig für alle der kleinste sein muß. Falls Du einen Datensatz löschen willst, dann definiere ihn über die ID oder/und einen Datenwert, aber niemals über " und auch Index=0". Das ist eine Information, die ausschließlich innerhalb der Datenbank benötigt und genutzt wird.

Gruß
K-H

tomkupitz 7. Feb 2017 21:42

AW: MySQL Zeilenindex
 
Also kann auf die Tabellenzeilen nicht (etwa wie in einer StringList) über den Index zugreifen?

nahpets 8. Feb 2017 00:24

AW: MySQL Zeilenindex
 
Nein, nur über den Inhalt.

Wenn die ID eindeutig ist, was bei Auto_Increment ja der Fall ist, wäre die kleinste ID wie oben beschrieben zu finden.

Aber:

SQL-Code:
select id, text from tabelle1 order by text
liefert eine andere Sortierung und damit muss der erste Satz im Abfrageergebnis noch lange nicht der mit der kleinsten ID sein.

jobo 8. Feb 2017 08:23

AW: MySQL Zeilenindex
 
Pedantisch:
Der Begriff "Index" hat hier in diesem Zusammenhang im Datenbankbereich nichts verloren. Der Datenbank-Index ist ein Hilfskonstrukt, das den Datenzugriff beschleunigen soll. Das hat nichts mit konkreten Werten zu tun. Die Existenz eines Spalten-Index (als Datenbankbegriff) hat keinerlei Einfluss auf Funktion und fachliches / logisches Verhalten, Werte oder sonstwas.
Es geht dabei nur um Performance.

Hier ist (wenn überhaupt) von einem Schlüssel (Key) die Rede, falls definiert, ansonsten kann man lediglich von einem kleinsten Wert ausgehen bzw. sprechen. (Den kann man meinetwegen noch als logischen Schlüsselwert bezeichnen).

"Kleinster Wert" ist wiederum eindeutig von der Begrifflichkeit, unabhängig von der Sortierung.
"Erster Wert" ist nicht(!) eindeutig, da er von der Sortierung abhängig ist, also quasi situationsabhängig.

Das Löschen des "ersten Wertes" macht also nur unter strengen Bedingungen Sinn, z.B. wenn über eine Tabelle ein FIFO oder ähnliches realisiert werden soll.
Ansonsten ist es jedenfalls angesagt, mit fachlich korrekt eingesetzten, konkreten Schlüsseln (Schlüsselwerten)zu arbeiten.
Auch das Löschen des kleinsten Wertes, was fachlich erwünscht sein kann, ist bspw. in einer Mehrbenutzerumgebung kritisch zu betrachten.

p80286 8. Feb 2017 10:04

AW: MySQL Zeilenindex
 
Zitat:

Zitat von jobo (Beitrag 1361084)
Auch das Löschen des kleinsten Wertes, was fachlich erwünscht sein kann, ist bspw. in einer Mehrbenutzerumgebung kritisch zu betrachten.

Was meinst Du damit?
Wenn genügend Benutzer da sind, löscht jeder den kleinsten Wert, und schwupp ist nichts mehr da?

Gruß
K-H

jobo 8. Feb 2017 11:08

AW: MySQL Zeilenindex
 
Ja, z.b. ist nichts mehr da, im schlimmsten Fall. Was aber schon eine massive Fehlfunktionen wäre. (Die wahrscheinlich auch schnell auffällt)
Die "Kleinheit" ist ja eine Frage der Perspektive. Wenn mehrere Nutzer den gleichen Arbeitsschritt durchführen und das Timing möglichst ungünstig, wer löscht dann welchen Wert? Kann un-erheblich sein, kann aber auch zu Fehlern führen.

p80286 8. Feb 2017 11:36

AW: MySQL Zeilenindex
 
Da Du einen solchen Blödsinn mit einrechnest scheint es um Datenbanken schlimmer zu stehen als ich gedacht habe.
:wall: :wall: :wall:

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz