Web-Datenbanken: MySQL

MySQL-Logo


Einleitung

MySQL Historie


MySQL Überblick

Features

MySQL Architektur

Installation

wierum{admin}[/usr/local/mysql]516: bin/mysqladmin ver
bin/mysqladmin  Ver 6.9 Distrib 3.21.33b, for sun-solaris2.5.1 on sparc
TCX Datakonsult AB, by Monty

Server version          3.21.33b-log
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /tmp/mysql.sock
Uptime:                 11 days 3 hours 13 min 45 sec

Running threads: 2  Questions: 56093  Opened_tables: 19  
Flush tables: 1  Open tables: 13

Sicherheitssystem

MySQL Tools

mysqld, safe_mysqld
MySQL server daemon und Start-Script
mysqlshow
Anzeige diverser Informationen
mysql
SQL shell (GNU readline)
mysqladmin
Administrations Tool, z.B. Start, Stop, Refresh, Create/Drop DB
mysqlaccess
Tool zum Testen und Anzeigen der Sicherheitskonfiguration
mysql_install_db
Initialisierung des Sicherheitssystems
isamchk
Reparatur-Tool für Datenbanken

mysqlshow

mysqlshow Databases

wierum{admin}[/usr/local/mysql]502: bin/mysqlshow 
+-----------+
| Databases |
+-----------+
| infoad    |
| mysql     |
| news      |
| rum       |
| stichwort |
| test      |
| ub        |
| uni       |
+-----------+

mysqlshow Database: stichwort

wierum{admin}[/usr/local/mysql]503: bin/mysqlshow stichwort
Database: stichwort
+--------+
| Tables |
+--------+
| links  |
+--------+

mysqlshow Database: stichwort Table: links

wierum{admin}[/usr/local/mysql]504: bin/mysqlshow stichwort links
Database: stichwort  Table: links  Rows: 145
+-------+-----------+------+-----+---------+----------------+
| Field | Type      | Null | Key | Default | Extra          |
+-------+-----------+------+-----+---------+----------------+
| link  | char(255) | YES  |     |         |                |
| name  | char(255) | YES  |     |         |                |
| hit   | int(11)   | YES  |     |         |                |
| ID    | int(11)   |      | PRI | 0       | auto_increment |
| ename | char(255) | YES  |     |         |                |
| elink | char(255) | YES  |     |         |                |
+-------+-----------+------+-----+---------+----------------+

mysql

show tables

mysql> show tables from stichwort;
+---------------------+
| Tables in stichwort |
+---------------------+
| links               |
+---------------------+
1 row in set (0.00 sec)

show columns

mysql> show columns from links from stichwort;
+-------+-----------+------+-----+---------+----------------+
| Field | Type      | Null | Key | Default | Extra          |
+-------+-----------+------+-----+---------+----------------+
| link  | char(255) | YES  |     | NULL    |                |
| name  | char(255) | YES  |     | NULL    |                |
| hit   | int(11)   | YES  |     | NULL    |                |
| ID    | int(11)   |      | PRI | 0       | auto_increment |
| ename | char(255) | YES  |     | NULL    |                |
| elink | char(255) | YES  |     | NULL    |                |
+-------+-----------+------+-----+---------+----------------+
6 rows in set (0.01 sec)

show databases

mysql> show databases;
+-----------+
| Database  |
+-----------+
| infoad    |
| mysql     |
| news      |
| rum       |
| stichwort |
| test      |
| ub        |
| uni       |
+-----------+
8 rows in set (0.01 sec)

phpMyAdmin

Mit phpMyAdmin existiert ein funktionales Web-Interface zur Verwaltung der MySQL Datenbanken.

Beispiele


(My)SQL Sprache

MySQL unterstützt ANSI SQL92 mit den schon genannten Ausnahmen.

SQL Grundkonstrukte

SQL Administrationskonstrukte


PHP Schnittstelle (API)

Das MySQL API ist stark an das mSQL API angelehnt. MySQL unterstützt auch ODBC (Open Database Conectivity) und JDBC (Java Database Conectivity).

Id = mysql_pconnect(hostname, username [, password])
Aufbau einer persistenten Verbindung zu einem MySQL Server
Id = mysql_connect(hostname, username [, password])
Aufbau einer Verbindung zu einem MySQL Server
mysql_close(Id)
Schliessen der Verbindung zum MySQL Server Id
Fehler = mysql_error(Id)
Beschreibung des letzten Fehlers beim Zugriff zum MySQL Server Id
DBid = mysql_select_db(database [, Id])
Auswahl einer Datenbank auf einem MySQL Server Id
 
Res = mysql_query(query [, Id])
Stellen einer Anfrage an einen MySQL Server Id
Res = mysql_db_query(database, query [, Id])
Stellen einer Anfrage an eine Datenbank auf einem MySQL Server Id
num = mysql_num_rows(Res)
Anzahl der Zeilen der Anfrage Res
col = mysql_num_fields(Res)
Anzahl der Spalten (Felder) der Anfrage Res
Data = mysql_result(Res, zeile [, spalte])
Entnahme einer Zeile (oder von Teilen einer Zeile) aus der Anfrage Res
Array = mysql_fetch_row(Res)
Entnahme der nächsten Zeile aus der Anfrage Res
num = mysql_data_seek(Res, zeile)
Positioniert einen Zeiger auf eine Zeile der Anfrage Res

Beispiel:

<?php
Function dbQuery ($statement) {
   global $dbconfig;
   mysql_pconnect($dbconfig["sqlserver"],
                  $dbconfig["sqlusername"],
                  $dbconfig["sqlpassword"]);
   mysql_select_db($dbconfig["defaultdb"]);
   $result=@mysql_query($statement);
   if (mysql_error()) { PrintError(mysql_error()); }
   return $result;
}
?>

PHP Beispiele

PHP Stichwortindex

Die Datenbank "webtech" besteht aus einer Tabelle "zaehler" mit zwei Spalten "file" und "count".

CREATE TABLE `zaehler` (
  `file` char(200) default NULL,
  `count` int(11) default NULL
) TYPE=ISAM PACK_KEYS=1;

MySQL PHP Counter


Java Schnittstelle JDBC

Das Java API Java Database Conectivity (JDBC) ist nicht an das mSQL API angelehnt, sondern erweitert das ODBC (Open Database Conectivity) API.

JDBC Versionen ab Java 1.4:

1.0 und 1.1:
in etwa die Funktionalität von ODBC, Package java.sql
2.1 Core in SE:
Navigation in Resultsets, Batch-Updates, Package java.sql
2.0 Optional in EE:
Connection Pooling, Distributed Transactions, neue Datenquellen, Package javax.sql
3.0 ab JDK 1.4:
vereinigt 2.1 Core und 2.0 Optional, mehrfache Resultsets, Pooled Statements, XML (Schema) Support, besserer BLOB und CLOB Support, Packages java.sql, javax.sql, javax.sql.RowSet

Die wichtigsten Klassen und Methoden aus java.sql sind:

Class.forName( mysqlDriver )
laden des MySQL Treibers: com.mysql.jdbc.Driver
DriverManager.getConnection(db,user,pword)
erzeugen eines Connection Objekts zur Datenbank db = "jdbc:mysql://host/db"
dbCon.close()
schliessen der Verbindung zu dbCon-Connection
 
stmt = dbCon.createStatement()
erzeugen eines SQL-Statements zur dbCon-Connection
rs = stmt.executeQuery( query )
durchführen der SQL-Abfrage query und erzeugen des ResultSet rs
pstmt = dbCon.prepareStatement( query )
vorbereiten eines SQL-Statements zur dbCon-Connection, Parameterpositionen werden durch ? gekennzeichnet
pstmt.setString(i, param );
pstmt.setInt(i, param );
einsetzen eines Parameters an die i. Stelle in dem SQL-Statement
rs = pstmt.executeQuery()
durchführen des vorbereiteten Statements und erzeugen des ResultSet rs
r = pstmt.executeUpdate()
durchführen eines vorbereiteten Statements und zählen der veränderten Tabellen Zeilen in r
stmt.close()
schliessen / freigeben des Statements stmt
 
rs.next()
prüfen, ob das ResultSet weitere Zeilen enthält und positionieren des "Cursors" auf die nächste Zeile
rs.getString(i);
rs.getInt('name');
entnehmen des Werts der i. Spalte, bzw. der Spalte 'name' aus der aktuellen Zeile
rs.close()
schliessen / freigeben des ResultSets rs
 
dbCon.setAutoCommit( false )
einschalten der Transaktionsverwaltung für die dbCon-Connection
dbCon.commit()
positives Beenden einer Transaktion, bestätigen aller Änderungen
dbCon.rollback()
negatives Beenden einer Transaktion, verwerfen aller Änderungen
 
SQLException
wird von fast allen Methoden ausgelöst, wenn etwas schief geht

JDBC Beispiele

Die Datenbank "inet" besteht aus einer Tabelle "counter" mit zwei Spalten "url" und "count".

CREATE TABLE `counter` (
  `url` varchar(255) NOT NULL default '',
  `count` int(11) NOT NULL default '0',
  KEY `url` (`url`)
) TYPE=MyISAM;

MySQL JDBC Counter

MySQL JDBC Counter Add


Schlussbemerkungen


© Universität Mannheim, Rechenzentrum, 1998-2004.

Heinz Kredel

Last modified: Sat Jun 5 20:57:21 CEST 2004