Row_Number in Mysql

In Mysql gibt es leider kein Funktion, welche die Zeilennummer einer Ergebniszeile mit angibt. Eigentlich schade, braucht man machmal. Oracle hat dafür ROW_NUMBER und der SQL-Server hat im Transact-SQL die Funktion ROW_NUMBER

Ein kleiner Trick hilft:
select
@rownum:=@rownum+1 ‘rank’,
t.*
from
aTable t,
(SELECT @rownum:=0) r
order by t.aColumn desc limit 10;

Wichtig ist das man vor der eigentlichen Verarbeitung eine Variable einführt (hier @rownum) und initalisiert (Wertzuweisung durch := ), die Variable wird dann bei der Endverarbeitung der Zeilen hochgezählt.

MySQL Workbench 5.2.14 Beta 4 Verfügbar

Das Team von MySQL hat eine neue Beta-Version des MySQL Workbench bereitgestellt (Release-Info). Wir drücken alle die Daumen, dass es nicht mehr so lange dauert, bis die Finale Version verfügbar ist.

Das Workbench 5.2. soll nicht nur die bekannten Modellierungswerkzeuge beinhalten, um MySQL-Datenbanken zu erstellen. Es auch zu einem ausgewachsen Administrationswerkzeug werden, was die Funktionen des MySQL Query Browser und des MySQL Administrator mit vereint.

Wir bleiben weiter gespannt.

MySQL Workbench 5.2.8 Beta verfügbar

Eine neue Version des MySQL Workbench 5.2 ist verfügbar. Die Version 5.2.8 ist nach Aussagen der Entwickler Feature-komplett

Neben dem bekannten Datenbankdesigner gibt es auch Funktionen aus den MySQL Query Browser, zum Abfragen gegen bestehende Datenbanken. Zudem sind Administrationsfunktion aus dem MySQL Admin-Tool integriert.

Vielleicht wird da ja noch eine IDE für den MySQL-Server drauss

Wer sich die aktuelle Beta-Version ansehen will kann es hier tun.

Carriage Return und Trim in MySQL

MySQL hat eine Eigenart, auf die man Rücksicht nehmen muss. Die Trim Funktion entfernt standardmassig nur Leerzeichen. Wagenrückläuft (Carriage Return und Line Feeds) bleiben erhalten. Wenn man die entfernen will muss man das seperat machen. Glücklicherweise unterstützt Mysql einen damit:


trim('\r' from str)

Die Dokumentation beschreibt die Funktion wie folgt:

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM(remstr FROM] str)

Gibt den String str zurück, bei dem alle remstr-Präfixe oder -Suffixe entfernt wurden. Wenn keine der Konfigurationsangaben BOTH, LEADING oder TRAILING angegeben wurde, wird BOTH vorausgesetzt. remstr ist optional; sofern es nicht angegeben ist, werden Leerzeichen entfernt.

Ich persönlich hätte es schöner gefunden, wenn sich die Funktion wie jede andere Trim-Funktion, zum Beispiel das Trim in PHP verhält und nicht sichbare Zeichen mit abschneidet. Erst recht schade, das SQL nicht ein Standard-Set an Funktionen definiert, die ein Datenbank haben muss und die immer gleich funktionieren. So könnte man endlich mal portable Datenbankanwendungen schreiben … nur so eine Idee …

MySQL Workbench 5.2.3 Alpha verfügbar

Eine neue Version des MySQL Workbench ist verfügbar. Mit der Version 5.2 wird das Workbench um Funktionen des MySQL Query Browsers erweitert. Es beinhalt, im Vergleich mit den Vorgängern, Live-Abfragen gegen Datenbanken. Somit reift das Produkt zu einer vollständigen IDE für den MySQL-Server.

Nach den ersten Tests kann man sagen nur sagen, wenn die Entwickler die Stabilitätsprobleme der in den Griff bekommen, wird es ein super Tool für MySQL.

Wer sich  die aktuelle Alpha-Version ansehen will kann es hier tun.

Root-Passwort in MySQL zurücksetzen

Es kommt immermal vor das man sich aus irgendeinen Grund aus der Datenbank ausgesperrt hat.

Hier eine kurze Anleitung wie man wieder reinkommt:

Zurücksetzung des MYSQL Root Passworts in Linux

  1. Auf dem System als root einloggen.
  2. Dann via den MySQL-Prozess stoppen:
    /etc/init.d/mysql stop
  3. File mit dem Inhalt:
    SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘MeinNeuesPasswort’);
    anlegen und speichern
  4. Folgenden Aufruf durchführen:
    mysqld_safe –init-file=/PFADZUMFILE/FILE
  5. Danach MySQL wieder neustarten:
    /etc/init.d/mysql restart

Und schon hat man ein neues Passwort für ROOT gesetzt.

Nicht vergessen die Datei wieder zu löschen!

Wer es ganz genau wissen will bzw. eine Anleitung für Windows sucht schaut bitte in der MySQL-Hilfe

Mein dank gilt  Mr. Foo, bei dem ich den Tip zuerst gesehen habe.

Remote-Server Query in Insert-Statment benutzen

Eine einfache Möglichkeit eine spezielle Abfrage auf einem Remote-Server auszuführen, so kann man die Sprachmittel des Remote-Servers verwenden und das Ergebnis mit Daten des SQL-Servers verbinden.


begin transaction

INSERT INTO foo(id)
select id from openquery(mybatz,'select * from batz where n>12')

rollback transaction

Diese Funktion ist besonders nützlich, wenn man nicht genau weis, was der Remote-Server ist und man nur die Tabellen kennt. Normalerweise kann man auf einen Remoteserver einfacher zugreifen, es eicht ein:
Select * from remoteserver.datenbank.schema.tabelle

aber das klappt nicht immer, nicht jeder OLE-DB-Provider unterstützt das. So finde ich openquery einen brauchbaren Ersatz.

Umkreissuche mit Google-Koordinaten mit MySQL

Mit der nachfolgende Funktion kann die Entfernung zwischen 2 Punkten auf der Erdkugel berechnet werden.


CREATE FUNCTION `GoogleDistance_KM`(
geo_breitengrad_p1 double,
geo_laengengrad_p1 double,
geo_breitengrad_p2 double,
geo_laengengrad_p2 double ) RETURNS double
RETURN (6371 * acos( cos( radians(geo_breitengrad_p2) ) * cos( radians( geo_breitengrad_p1 ) )
* cos( radians( geo_laengengrad_p1 ) - radians(geo_laengengrad_p2) )
+ sin( radians(geo_breitengrad_p2) ) * sin( radians( geo_breitengrad_p1 ) ) )
);

Somit kann man ganz einfach in einer MySQL-Datenbank die Elemente ermitteln die zm Beispiel im Umkreis zu einem bestimmten Punkt liegen. Ich denke das Beispiel läßt sich auch leicht auf den SQL-Server oder auf eine Oracle-Datenbank übertragen.

Läßt sich dann ganz einfach benutzen:

CREATE TABLE `Adressen` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 60 ) NOT NULL ,
`address` VARCHAR( 80 ) NOT NULL ,
`geo_laengengrad` double NOT NULL ,
`geo_breitengrad` double NOT NULL
)

SELECT id, adresse, geo_laengengrad, geo_breitengrad
from adressen
where GoogleDistance_km(geo_breitengrad, geo_laengengrad, 40, -122) <= 100

Mehr zur Berechnung von Entfernungen, Peilung, Mittelpunkt etc gibts hier

Updatefehler: Microsoft SQL Server 2005 – KB934458 – Error 2806

Das automatische Update von Windows funktioniert nicht immer ganz rein. Interessanter Weise lies sich diesmal nicht das Microsoft SQL Server 2005 – Update “GDR 3054 for SQL Server Database Services 2005 ENU (KB934458)” nicht richtig installieren.

Das angegebene Log-File half da auch nicht viel, um zu erkennen woran es lag. Ein Blick in das Ergeibnis-Log verriet folgenden Hinweis:

“Product: Microsoft SQL Server 2005 — Error 28062. SQL Server Setup cannot install files to the compressed or encrypted folder: c:\Programme\Microsoft SQL Server\. To continue, make sure that your installation directories are not compressed or encrypted, or specify a different directory, and then run SQL Server Setup again.”

Nun gut, zum Glück hatte ich noch genug Platz auf der Maschine und konnte den Ordner wieder entkomprimieren.

Interesant ist, warum es Microsoft nicht schafft mit komprimierten Dateisystemen klarzukommen, haben die das nicht getestet? Na ich hoffe das der gesendete Fehlerbericht auch wirklich ausgewertet wird, damit das nicht mehr passiert.

Ich bin für meinen Teil nur froh, dass das Update nicht schief gegangen ist und die Installtion nicht runtergerissen hat.

Aus Datenbank ausgesperrt

Unter Umständen ist es möglich sich aus dem SQL-Server auszusperren. Besonders einfach geht es wenn der Administrator schafft seine Default-Datenbank zu löschen (muss er ja nicht selbst gewesen sein, da reicht ja eine unbedarfter Mitstreiter).

Häufig bekommt man dann folgende Fehlermeldung:

Can not open user default database. Login failed. Login failed for user 'fool'. (Microsoft SQL Server, Error: 4064)

Erstmal muß sich eine User anmelden, der die Rechte hat Login’s zu bearbeiten. Da dies häufig Admins sind (also Vordefinierte/Administratoren der Maschine) kann da schon eine Schwierigkeit entstehen in den Entprise Manager oder das SQL-Server Managment Studio zu kommen.

Hier ein kleiner Leitfaden damit man wieder mit den normalen Werkzeugen arbeiten kann.

– Am besten geht es mit den Kommandozeilen-Tool SQLCMD oder isql

– Anmelden mit der Option -U temp sqlcmd -d tempdb damit ist der User auf der Datenbank tempdb angemeldet.

– dort setzt man dann folgenden Befehl ab: alter login [username] with DEFAULT_DATABASE = <neue Defaultdatenbank>; die Default-Datenbank ist jetzt die <neue Defaultdatenbank>.

Mit dieser Kurzanleitung sollte es möglich sein, sich wieder am SQL Server Managmentstudio anmelden und dem Login kann eine bessere Defaultdatenbank verpaßt werden.