Die Community zu .NET und Classic VB.
Menü

MySQL-Datenbanken

 von 

Übersicht 

Dieses kurze Tutorial soll zeigen, wie man mit "MySQL"-Datenbanken umgeht. Behandelt wird auch die Installation und der Zugriff.

Was ist MySQL?  

MySQL ist ein relationales Datenbankmanagementsystem (RDBMS). Es ist Freeware. D.h. dass das Programm incl. Quellcode kostenlos verfügbar ist. Durch die freie Verfügbarkeit des Quellcodes ist es für verschiedene Betriebssysteme erhältlich. Eine große Anzahl an UNIX-Derivaten (incl. Linux Distributionen) nämlich, FreeBSD, MacOS, Microsoft Windows u.a.. Bei vielen UNIX-Distributionen liegt es sogar (teilweise vorkompiliert) bei, da man eigentlich immer eine Datenbank benötigt.

Entwickelt wurde MySQL von Michael Widenius (a.k.a. Monty) von der Schwedischen Firma TcX. Er war der einzige Programmierer des Unternehmens und hat sich seit 1979 mit der Datenhaltung beschäftigt. 1994 stieß er schließlich auf mSQL (mini SQL, kompaktes DBMS), welches von David Hughes gerade in Version 1 verfügbar gemacht wurde.

Da Hughes die Planung für mSQL 2 bereits abgeschlossen hatte, entschied sich Widenius sein bis dato im Einsatz befindliches DBMS zu erweitern und eine API-Kompatibilität zu mSQL zu installieren. D.h. mSQL User sollten ihre Anwendungen evtl. irgendwann auf sein neues DBMS portieren können, welches im May 1995 den von TcX gestellten Anforderungen entsprach, und als MySQL 1.0 unter bis dahin unbekannt flexiblen Lizenzbedingungen im Internet veröffentlicht wurde. Mit dem Tag der Veröffentlichung begann MySQLs Siegeszug. Mittlerweile ist Version 3.23 aktuell. Version 4 bereits im Alpha Stadium.

Ziel war es immer ein kompaktes und portables DBMS bereitzustellen. Mit der wachsenden Zahl an Nutzern stiegen die Anforderungen. Mit der aktuellen Version MySQL 5.0 (Community Edition) ist nun ein Stand erreicht der sowohl über Installationsroutinen für verschiedene Betriebssysteme (u.a. Windows-MSIs) als auch über diverse Werkzeuge zur Verwaltung der Datenbank verfügt.

Systemvoraussetzungen  

Aufgrund der flexiblen Lizenzbestimmung gibt es MySQL einsatzbereit zum kostenlosen Download auf der eigens dafür eingerichteten Website www.mysql.com respektive weltweiter Mirrors. Als VB Programmierer benötigt man in der aktuellen Version 5.0 die Community Edition. Hierbei kann man zwischen den Essentials (15.9 MB) und der kompletten Version (36.7 MB) wählen. Sie ist für alle 32Bit Window-Betriebssysteme (95, 98, ME, NT, 2000, XP) geeignet.

Weiterhin benötigt man den zugehörigen ODBC Treiber der zurzeit in der Version 3.51.12 vorliegt. Es existiert auch bereits die Version 5.0, allerdings befindet sich diese noch im Alpha-Stadium . MySQL ODBC-Treiber 3.51

Installation  

Die Datenbankserversoftware und der ODBC-Treiber liegen installierfertig vor. Sie werden beide wie "ganz normale" Windows-Programme installiert. Am besten fängt man natürlich mit der Datenbank an.

Der Installationsassistent führt durch die Installation. Die Installation selber erfolgt in dem Verzeichnis C:\Programme\MySQL\MySQL Server 5.0\. Im Rahmen der Installation kann man einen kostenlosen MySQL-Account anlegen oder aber diesen Punkt einfach überspringen.

Nach dem Kopieren der Dateien in das angegebene Verzeichnis kann man direkt zur Konfiguration des MySQL-Servers übergehen. Hierbei kann man zwischen einer Standard- oder aber einer detaillierten Konfiguration wählen. Die Standardkonfiguration sollte man nur dann wählen, wenn man nicht bereits einen MySQL-Server installiert hat.

Die Standardkonfiguration ist so parametrisiert, daß man bis auf das Rootpasswort eigentlich nichts an den vorgegebenen Werten verändern muss. Nach der Einrichtung des Servers ist die Installaiton beendet.

Die Installation des ODBC Treibers geschieht analog.

Als weitere Tools kan ich jedem nur das Administrations- sowie das QueryBrowser-Tool von MySQL ans Herz legen. Beide liegen zurzeit jeweils in der Version 1.1 vor. Das Administrationstool ermöglich die komplette Verwaltung des Datenbankservers. Neue Schemas sowie neue Benutzer können angelegt, Datensicherungen verwaltet sowie Logfiles eingesehen werden. Mit dem QueryBrowser hat das Zeitalter des Dos-Fenster endgültig ausgedient. Hier können Statements einfach an die Datenbank abgesandt werden.

Weitere - direkt bei MySQL erhältliche - Tools sind das Migrationstool sowie das WorkBench-Tool. Mit letzterem können Datenbankmodelle entworfen und in die Datenbank eingespielt werden.

Zugriffstheorie (ADO=>OLE DB=>ODBC)  

Jede Datenbank stellt eine Clientlibrary (API) zur Verfügung, die sich von DBMS zu DBMS unterscheiden.

Deswegen hat man Open DataBase Connectivity (ODBC) erfunden. ODBC bietet die Schnittstelle zwischen Anwendung und Datenbank und bietet die Möglichkeit Anwendungen unabhängig vom Typ der dahinterstehenden Datenbank zu entwickeln.

Dasselbe ist faktisch Aufgabe von OLE DB. Allerdings mit dem Unterschied, dass OLE DB nicht auf relationale DBMSs beschränkt ist.

Microsoft stellt mit ADO eine Zugriffstechnologie zur Verfügung, die die komplizierten OLE DB Datentypen (Klassen) für alle COM-kompatiblen Entwicklungsumgebungen einfach zugänglich macht.

Man stellt mit ADO über einen sogenannten OLE DB Provider eine Verbindung zur DB her. Da es von offizieller Seite keinen MySQL-OLE DB Provider gibt, muss man den umständlicheren und daher langsameren Weg gehen, dass man von ADO aus den OLE DB Provider für ODBC (Teil der Microsoft Data Access Components) nutzt, der wiederum den ODBC Treiber bedient, der schließlich auf die DB zugreift.

Beispiele  

Als erstes müssen wir uns eine Datenbank anlegen, die wir in den folgenden Codebeispielen aulesen. Dazu wechseln wir am Dosprompt in das Verzeichnis, in das wir MySQL installiert haben und weiter in das Unterverzeichnis \bin. Insofern man den Pfad zu MySQL bei der Installation in den Windows-Pfad mit hat eintragen lassen, kann man einfach MySQL eingeben.

Wir rufen den SQL-Monitor auf:

C:\MySQL\>mysql -uroot -pBeiDerInstallationAngegebenesPasswort

Eine Übersicht über die einzelnen Parameter erhält man mit MySQL -?

Und haben nun die Möglichkeit SQL-Befehle auf den lokalen MySQL-Server abzusetzen. Das erkennen wir am neuen Prompt. Man kann mysql mit bestimmten Parametern starten, dass man Zugriff auf andere (remote) Server hat, was hier aber irrelevant sein soll.
Wir legen jetzt eine Datenbank "Users" an, indem wir

mysql> CREATE DATABASE Users;

eingeben. (mysql> steht schon da, das ist nämlich der Prompt des SQL-Monitors.)

Mit mysql> \u Users wechseln wir in die neu angelegte Datenbank. Folgendes Statement legt uns die Tabelle "TabUsers" an, die wir auslesen werden.

mysql> CREATE TABLE TabUsers (
    UID INT2 PRIMARY KEY auto_increment,
    Name VARCHAR(25),
    Vorname VARCHAR(25),
    INDEX(Name),
    INDEX(Vorname)
);

Es sieht etwas kompliziert aus, ist es aber nicht.
Unsere Tabelle hat 3 Datenworte.
UID (2 Byte lang, Ganzzahl, Primärschlüssel=>Unique)
Name (bis zu 25 Bytes, String)
Vorname (bis zu 25 Bytes, String)
Die 2 letzten Zeilen deuten an, dass Indizes (Indexe) erstellt werden, die das Suchen nach Namen und Vornamen beschleunigen.

MySQL verfügt über einen ausgeklügelten Zugriffsschutz. Man kann wenn man will Nutzer anlegen und ihnen Zugriffsrechte für einzelne Datenworte einer bestimmten Tabelle geben, wobei sie aber von einem bestimmten Computer aus zugreifen müssen. Wir werden einen Nutzer anlegen, der auf die Datenbank Users vollzugriff hat. Dazu müssen wir erstmal den Benutzer an sich anlegen. Dies erfolgt mit folgendem Statement

mysql> CREATE USER 'selber' identified BY 'nopwd';

Wir haben nun einen Benutzer selber mit dem Passwort nopwd .

Da die Zugriffsrechte standardmäßig verweigert werden, müssen wir dem Benutzer noch die notwendigen Rechte zuordnen. Der Einfachheit halber ordnen wir dem Benutzer erstmal alle Rechte auf alle Objekte zu.

mysql> GRANT ALL ON users.* TO 'selber';

Nun kann sich der Benutzer zum Beispiel mit dem QueryBrowser an die Datenbank users anmelden.

Als Nutzer "selber" werden wir später auf die DB zugreifen. Wir beenden jetzt den SQL-Monitor. Dazu geben wir am Prompt Quit ein.

mysql> quit

Am Dosprompt rufen wir mysqladmin mit der Anweisung reload auf. Diese Anweisung bewirkt, dass die Nutzertabelle als Zugriffsschutz neu geladen wird. Um dieses Statement ausführen zu können muss man entsprechende Nutzerrechte haben. Es gibt in der user Tabelle in der mysql Datenbank einen Nutzer der, wenn er vom Rechner zugreift, auf dem sich MySQL befindet alle Rechte hat. Andernfalls müsste man einen Nutzernamen und das zugehörige Passwort übergeben.

C:\MySQL\>mysqladmin reload -uroot -pBeiDerInstallationAngegebenesPasswort
C:\MySQL\>mysql -uselber -pnopwd

Nach dem zweiten Statement am Dosprompt finden wir uns im SQL-Monitor wieder. Hier fügen wir jetzt die Daten in die DB ein, die wir gleich auslesen werden.

mysql> \u Users
INSERT INTO TabUsers (Name, Vorname) VALUES('Mayr', 'Hans');
INSERT INTO TabUsers (Name, Vorname) VALUES('Hansen', 'Olaf');

Zuerst erfolgt der Wechsel in die vorhin angelegte "Users" Datenbank. Anschließend werden für jeden Nutzer Name und Vorname angegeben. Die UID müssen wir nicht angeben, sie wird automatisch eingetragen. Deswegen das Schlüsselwort auto_increment beim Anlegen der DB.

Mit:

mysql> quit

beenden wir den SQL-Monitor schließlich wieder. Die Daten stehen in der DB und warten nur darauf ausgelesen und verarbeitet zu werden. Also starten wir der Einfachheit halber Notepad und kopieren folgendes VBScript hinein.

Option Explicit

'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
' Const adOpenKeyset = 1
' Const adOpenDynamic = 2
' Const adOpenStatic = 3

'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
' Const adLockPessimistic = 2
' Const adLockOptimistic = 3
' Const adLockBatchOptimistic = 4

'---- CursorLocationEnum Values ----
' Const adUseServer = 2
Const adUseClient = 3

'---- ConnectModeEnum Values ----
' Const adModeUnknown = 0
Const adModeRead = 1
' Const adModeWrite = 2
' Const adModeReadWrite = 3
' Const adModeShareDenyRead = 4
' Const adModeShareDenyWrite = 8
' Const adModeShareExclusive = &Hc
' Const adModeShareDenyNone = &H10
' Const adModeRecursive = &H400000

Dim Conn, RS

Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "MSDASQL"
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _
          "DATABASE=users;" & _
          "SERVER=localhost;", _
          "selber", "nopwd"

Set RS = CreateObject("ADODB.Recordset")
RS.CursorLocation = adUseClient
RS.Source = "Select * from TabUsers;"
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open          

Do While Not RS.EOF
    WScript.Echo RS.Fields.Item("UID").Name & " " & _
                 RS.Fields.Item("Name").Value & ", " & _
                 RS.Fields.Item("Vorname").Value
    RS.MoveNext
Loop

RS.Close
Set RS = Nothing

Conn.Close
Set Conn = Nothing

Wir speichern es in einem beliebigen Verzeichnis als MySQL.vbs ab und wechseln am Dosprompt in dieses Verzeichnis.
Hier rufen wir jetzt:

C:\AVB_TUTs\>cscript mysql.vbs //NOLOGO

auf. Und siehe da! (Tata ;-) Beide Nutzer da. Dasselbe können wir mit einem JScript tun.

//---- CursorTypeEnum Values ----
var adOpenForwardOnly = 0;
// var adOpenKeyset = 1;
// var adOpenDynamic = 2;
// var adOpenStatic = 3;

//---- LockTypeEnum Values ----
var adLockReadOnly = 1;
// var adLockPessimistic = 2;
// var adLockOptimistic = 3;
// var adLockBatchOptimistic = 4;

//---- CursorLocationEnum Values ----
// var adUseServer = 2;
var adUseClient = 3;

//---- ConnectModeEnum Values ----
// var adModeUnknown = 0;
var adModeRead = 1;
// var adModeWrite = 2;
// var adModeReadWrite = 3;
// var adModeShareDenyRead = 4;
// var adModeShareDenyWrite = 8;
// var adModeShareExclusive = 0xc;
// var adModeShareDenyNone = 0x10;
// var adModeRecursive = 0x400000;

var Conn, RS;

Conn = WScript.CreateObject("ADODB.Connection");
Conn.Provider = "MSDASQL";
Conn.Mode = adModeRead;
Conn.CursorLocation = adUseClient;
Conn.Open("Driver={MySQL ODBC 3.51 Driver};" + 
          "DATABASE=Users;" + 
          "SERVER=localhost;", 
          "selber", "nopwd");
                        
RS = WScript.CreateObject("ADODB.Recordset");
RS.ActiveConnection = Conn
RS.CursorLocation = adUseClient;
RS.CursorType = adOpenForwardOnly;
RS.LockType = adLockReadOnly;
RS.SOurce = "Select * from TabUsers;";
RS.Open;

while(!RS.EOF) {
    WScript.Echo(RS.Fields.Item("UID").Value + " " + 
                 RS.Fields.Item("Name").Value + ", " + 
                 RS.Fields.Item("Vorname").Value);
    RS.MoveNext;
}
                        
RS.Close
Conn.Close

Dieses speichern wir als MySQL.js und rufen es ebenfalls am Dosprompt auf. Diesmal nehmen wir WScript was bewirkt, dass die Ausgabe in Messageboxen erfolgt.

C:\AVB_TUTs\>wscript mysql.js //NOLOGO

Schließlich beenden wir das Konsolenfenster und starten VB. Ein neues EXE-Projekt am besten. Mit Projekt=>Verweise binden wir die ADO-Library ein. Dem Standard Formular fügen wir einen Button hinzu In die OnClick-Funktion schreiben wir:

Dim Conn As ADODB.Connection
Dim RS   As ADODB.Recordset

Set Conn = New ADODB.Connection
Conn.Provider = "MSDASQL"
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _
          "DATABASE=Users;" & _
          "SERVER=localhost;", _
          "selber", "nopwd"

Set RS = New ADODB.Recordset
RS.CursorLocation = adUseClient
RS.Source = "Select * from TabUsers;"
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open          

Do While Not RS.EOF
    Debug.Print RS.Fields.Item("UID").Value & " " & _
                RS.Fields.Item("Name").Value & ", " & _
                RS.Fields.Item("Vorname").Value
    RS.MoveNext
Loop
                    
RS.Close
Set RS = Nothing

Conn.Close
Set Conn = Nothing

Wenn wir das Programm starten und auf den Button klicken stehen die eingetragenen Namen wie von Zauberhand im Debugfenster.

Zusammenfassung  

Was wir gelernt haben ist die Entstehung von MySQL und das Einrichten des Datenbankservers auf einem Microsoft-Windows-Betriebssystem. Wir haben mit dem SQL-Monitor Eine Datenbank und eine Tabelle erstellt, sie mit Daten gefüllt und eine Kleinigkeit über Nutzerverwaltung eines DBMS erfahren.
Schließlich haben wir Beispiele kennengelernt, wie man mit VBScript und JScript (Anwendung zum Beispiel mit ASP von einem Webserver aus) und natürlich mit VB Daten aus einer MySQL Datenbank mithilfe des MyODBC-Treibers und des MSDASQL-OLE DB-Providers liest und ausgibt.
Was wir noch lernen müssen ist die Eingabe von Daten. Auch sollten wir uns eingehend mit der Nutzerverwaltung beschäftigen.

Quellen und Buchempfehlungen:

Websites die ich während des Schreibens des Tutorials aufgerufen habe sind:
http://www.mysql.com
http://sourceforge.net/projects/mysql/
http://www.mysql.com/downloads/api-myodbc.html
http://www.mysql.com/documentation/index.html
http://www.milonic.com/history.php?tp=mysql

Bücher die ich zu Hilfe nahm:
http://www.oreilly.com/catalog/msql/ (Englische Version)
http://www.oreilly.de/catalog/msqlger/ (Deutsche Version)

Bücher die lesenswert sein sollen:
http://www.kitebird.com/mysql-book/

Für Anfragen stehe ich gerne zur Verfügung.

Ihre Meinung  

Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.