MySQL PRIMARY KEY / _rowid [erledigt]

Alles zum SQL-Dialekt

Moderator: Moderatoren

MySQL PRIMARY KEY / _rowid [erledigt]

Beitragvon AUGE_OHR » Mo, 29. Sep 2014 16:39

Ich habe das Gegenstück von PostgreSQL Row_Number() entdeckt was beim "Navigieren" helfen könnte
If a PRIMARY KEY or UNIQUE index consists of only one column that has an integer type,
you can also refer to the column as "_rowid" in SELECT statements.

man kann es dann an die FIELD Auswahl ( hier "*" ) anhängen und man hat eine zusätzliche Column
Code: Alles auswählen
SELECT *, _rowid FROM cTable WHERE blabla
UPDATE cTable SET NNR='1111' WHERE _rowid = 2
Frage : wie kann ich bei einer MySQL Table feststellen ob die einen PRIMARY KEY oder UNIQUE Index hat und welches FIELD es ist ?
Zuletzt geändert von AUGE_OHR am Di, 30. Sep 2014 1:36, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10149
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: MySQL PRIMARY KEY / _rowid

Beitragvon georg » Mo, 29. Sep 2014 18:46

Hallo, Jimmy -


DESCRIBE TABLE

Aber sei bitte vorsichtig, _rowid sieht mir sehr stark nach einer Anbieter-spezifischen Erweiterung aus. Es ist quasi ein Alias für die Spalte, die als PRIMARY KEY dient.

Bei MySQL heisst das entsprechende Attribut AUTO_INCREMENT und es kann in einer Tabelle nur einer Spalte zugewiesen werden.

Die Numerierung ist aber nicht konsekutiv, sondern willkürlich, sobald Du den ersten Datensatz gelöscht hast:

Die Feldinhalte werden nicht "aktualisiert", sondern behalten ihren Wert. Besonders ärgerlich ist das, wenn Du eine Tabelle mit "DELETE FROM meinetabelle" völlig leer machst und einen neuen Datensatz schreibst. Das Schlüsselfeld bekommt nicht den Wert 1, sondern den höchsten, bisher vergebenen Wert + 1. Ein Gedächtnis wie ein Elefant, wie wir so sagen. Wenn man das im Hinterkopf behält, kann man ein solches Verfahren verwenden.
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1769
Registriert: Fr, 08. Feb 2008 21:29

Re: MySQL PRIMARY KEY / _rowid

Beitragvon AUGE_OHR » Mo, 29. Sep 2014 20:45

georg hat geschrieben:DESCRIBE TABLE
Aha, Ja.
DESCRIBE, EXPLAIN und SHOW COLUMNS geben mir die Antwort.

georg hat geschrieben:Aber sei bitte vorsichtig, _rowid sieht mir sehr stark nach einer Anbieter-spezifischen Erweiterung aus. Es ist quasi ein Alias für die Spalte, die als PRIMARY KEY dient.
ich habe das aus
MySQL 5.6 Reference Manual, Seite 1431
wo es nur kurz angerissen wird.

georg hat geschrieben:Bei MySQL heisst das entsprechende Attribut AUTO_INCREMENT und es kann in einer Tabelle nur einer Spalte zugewiesen werden.

Die Numerierung ist aber nicht konsekutiv, sondern willkürlich, sobald Du den ersten Datensatz gelöscht hast:

Die Feldinhalte werden nicht "aktualisiert", sondern behalten ihren Wert. Besonders ärgerlich ist das, wenn Du eine Tabelle mit "DELETE FROM meinetabelle" völlig leer machst und einen neuen Datensatz schreibst. Das Schlüsselfeld bekommt nicht den Wert 1, sondern den höchsten, bisher vergebenen Wert + 1. Ein Gedächtnis wie ein Elefant, wie wir so sagen. Wenn man das im Hinterkopf behält, kann man ein solches Verfahren verwenden.
tja und dem Fall würde ja dann _rowid helfen weil das der effektiven ROW Anzahl im Resultset angepasst ist.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10149
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: MySQL PRIMARY KEY / _rowid [erledigt]

Beitragvon AUGE_OHR » Di, 30. Sep 2014 1:43

Nachtrag : so finde ich es mit DESCRIBE einen PRIMARY KEY Eintrag
Code: Alles auswählen
LOCAL cSql     := "DESCRIBE "+cTable
   ...
   // "DESCRIBE "+cTable
   aRes := ::oCon:QuerySql( cSql )

   // search for internal Field
   nRecord := ASCAN(aRes,{|x| UPPER(x[1]) = "__RECORD"} )
   IF nRecord > 0
      nRow := nRecord
   ELSE
      // search for any PRIMARY KEY
      nRow := ASCAN(aRes,{|x| "PRI" $ UPPER( x[4] ) } )
      IF nRow > 0
         AADD(aFields,{"_rowid","N",11,0})
      ENDIF
   ENDIF
das funktioniert zumindest mit einem PRIMARY KEY ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10149
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg


Zurück zu SQL (Sprache)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron