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

Über den SQL-Server auf eine MySQL-Datenbank zugreifen.

Um mit Hilfe der Linked-Server Technologie auf eine MySQL-Datenbank zuzugreifen, müsste man folgendes tun:

Als erstes muß der Linked Server (auf deutschen Systemen ‘Verbindungsserver’ angelegt werden, dazu kann man folgenden Befehl verwenden:

sp_addlinkedserver
'myAlias'
, 'MySQL'
, 'MSDASQL'
, Null
, Null
, 'Driver={MySQL ODBC 3.51 Driver}; DB=myDatabase; UID=myUserName; PWD=myPassword; SERVER=localhost;'
go

EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'myAlias',
@useself = 'TRUE',
@locallogin = NULL
go

Wichtig ist, das der ODBC-Treiber von MySQL auch auf der SQL-Server-Maschine installiert ist. Bei MySQL-Datenbanken, die auf anderen Rechnern betrieben werden, die als den localhost ist ein Benutzer einzurichten, der auch remote zugang auf die entsprechenden MySQL-Datenbanken hat.

Zugriff auf die entsprechenden Tabellen erhält man nach folgenden Schema:

Select * from openquery( linked Server Name,'PassThrougth Query')

Mit Hilfe von Openquery können auch Insert, Update und Delete Anweisungen ausgeführt werden, dazu sollte man aber Dokumentation lesen.