Sprungmarken

Videoportal der FAU

Die letzten Meldungen

Novell Serverwartung MOLMED am Dienstag, 22 Mai von 8 Uhr bis ca. 11 Uhr

16. Mai 2012

Am Dienstag, 22 Mai findet von 8 Uhr bis voraussichtlich 11 Uhr eine dringende Serverwartung des Novell-Servers “MOLMED” statt. In der genannten Zeit ist der Zugriff auf die Volumes “USERTEMP” und “SYS” nicht möglich.
Weiterlesen...

Terminänderung – Vortrag “Einführung von fau.de-Maildomains und neuen Mail-/Groupware-Komponenten für die FAU” verschoben

15. Mai 2012

Aufgrund von Terminüberschneidungen mussten im Rahmen der Vorlesung “PRAXIS DER DATENKOMMUNIKATION” (Netzwerkausbildung) Termine getauscht werden.
Weiterlesen...

RRZE-Betrieb am „Berch“-Dienstag

15. Mai 2012

Am Dienstag, den 29.05.2012, wird das RRZE ab 12 Uhr geschlossen.
Weiterlesen...

Meldungen nach Thema

 

Migration MySQL nach Frebird

Hier eine Gegenüberstellung von Lösungen in MySQL und Firebird.

Einige der Informationen stammen aus Externer Link:  FAQ for Firebird Users Migrating From MySQL und wurden hier nur übersetzt und an loklae Gegebenheiten angepasst.

Verbindungen aufbauen (=Connect)

Während bei MySQL, ähnlich wie bei Oracle und DB/2 der Server alle Datenbanken kennt, ist dies beim Firebird-Server nicht so. Bis zur Version 1.5 muß man beim Verbindungsaufbau dementsprechend direkt auf die Datei verweisen.
Ab der Version 1.5 sind serverseitige Aliasse vorgesehen.

MySQL LogoMySQL:

SERVER_HOST=data1.rrze.uni-erlangen.de
DATABASE_NAME=testdb
USERNAME=username
PASSWORD=*****

Firebird LogoFirebird:

DATABASE_PATH=data1.rrze.uni-erlangen.de:/data/dbfiles/test.gdb
USERNAME=username
PASSWORD=*****
ROLE=*****

Im Gegensatz zu MySQL speichert der Firebird-Server alle Datenbank-Objekte (Tabellen, Idizes, Views...) in einer Datei. Die Endung ist standardmäßig .gdb.

AutoInc Felder in Firebird (=Generatoren und Trigger)

Die häufigste Frage bei der Migration nach Firebird ist die nach der eindeutigen Transaktions-unabhängigen Nummerierung von Datensätzen.

Dafür stellt der Firebird-Server (wie auch Oracle) Generatoren zur Verfügung.

Hier ein vergleichendes Beispiel für eindeutige Primärschlüssel:

MySQL LogoMySQL:

CREATE TABLE test
(
field1 integer not null auto_increment,
field2 char(10),
PRIMARY KEY (field1)
);

Datensatz einfügen:

INSERT INTO test (field2) VALUES ('testme');

Firebird LogoFirebird:

CREATE TABLE test
(
field1 integer not null,
field2 char(10),
PRIMARY KEY (field1)
);

CREATE GENERATOR gen_test_id;

Datensatz einfügen:

INSERT INTO test (field1, field2) VALUES (gen_id(gen_test_id, 1), 'testme');

Das ist auf den ersten Blick etwas aufwendiger, als bei MySQL. Allerdings ist der Vorteil die Flexibilität.

Mit ...

SELECT gen_id(gen_test_id, 0) FROM ...

... kann man jederzeit den Wert eines Genwerators abfragen, ohne diesen zu verändern
und man kann den wert eines Generators jederzeit setzen mit:

SET GENERATOR gen_test_id TO [bel. integer Wert];

Um die Arbeit mit Generatoren zu vereinfachen, empfielt es sich, einen Trigger zu implementieren, das den Generatorwert automatisch setzt, wenn er noch nicht gesetzt ist (=NULL):

CREATE TRIGGER test_bi FOR test
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 IF (NEW.field1 IS NULL) THEN
  NEW.field1 = GEN_ID(gen_test_id,1);
END

Durch die Abfrage, ob der Wert schon gesetzt ist, gibt es keinen Konflikt mit der Einfügen-Routine von oben. Damit wird die Syntax des INSERT-Ausdrucks von MySQL auch auf dem Firebird-Server verwendbar.

Mehr zu Generatoren im InterBase Data Definition Guide.

limit x, y in Firebird (Beschränkung der Anzahl der Rückgaben)

Ab Firebird 1.0 gibt es zur Einschränkung der zurückgelieferten Datensätze die FIRST X SKIP Y-Erweiterung des SELECT-Befehls.

Firebird LogoFirebird:

SELECT FIRST x SKIP y FROM ... [weitere Query-Optionen]

Die Rückgabe besteht aus (maximal) x Datensätzen, wobei die ersten y übersprungen werden. Wenn X oder Y 0 sein sollen, kann das Schlüsselwort auch weggelassen werden.

LIST TABLES (Auflistung der Tabellen einer DB)

In MySQL kann man sich mit SHOW TABLES alle Tabellen in einer datenbank anzeigen lassen. Diese Funktion existiert in der Kommandozeilen-Version isql des Firebird-Servers ebenfalls.

Allgemeiner erhält man durch Nachschlagen in den System-Tabellen eine Liste aller Tabellen:

Firebird LogoFirebird:

SELECT RDB$RELATION_NAME FROM RDB$RELATIONS;

Die Rückgabe besteht aus allen Tabellen inkl. Views und system-Tabellen

Firebird LogoFirebird:

SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0;

... schränkt die Rückgabe auf Benutzer-Tabellen und Views ein.

Firebird LogoFirebird:

SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 AND RDB$VIEV_BLR IS NULL;

... schränkt die Rückgabe auf Benutzer-Tabellen ohne Views ein.

Eine Ausgabe der System-Tabellen ohne Views bleibt dem Leser als übung offen

Anzahl der Rückgabe-Records (recordcount)

MySQL zählt die Anzahl der zurückgelieferten Datensätze standardmäßig. Diese Funktion bietet der Firebird-Server nicht. Stattdessen kann man die Anzahl der Datensätze durch ein SELECT COUNT(*)... SQL-Statement bestimmen.
Aber Achtung: SELECT COUNT(*)... ist eine "teuere" Operation. Ist die Anzahl wirklich nötig?

Letzte Änderung: 13. Maerz 2012, Historie

zum Seitenanfang

Startseite | Kontakt | Impressum

RRZE - Regionales RechenZentrum Erlangen, Martensstraße 1, D-91058 Erlangen | Tel.: +49 9131 8527031 | Fax: +49 9131 302941

Inhaltenavigation

FAU - Friedrich-Alexander-Universität
UnivIS - Informationssystem der Friedrich-Alexander-Universität Erlangen Nürnberg

Zielgruppennavigation

  1. Studierende
  2. Beschäftigte
  3. Einrichtungen
  4. IT-Beauftragte
  5. Presse & Öffentlichkeit