MySQL installieren

Wer MySQL zusammen mit einem Webserver lokal als Entwicklungsumgebung verwenden will, sollte sich Xampp installieren. 

Wenn nur die Datenbank MySQL benötigt wird, ist Xampp allerdings überdimensioniert.

Den Dowload gibt es bei www.mysql.de/downloads/mysql/. Hier unbedingt das gewünschte Betriebssystem auswählen.

MySQL 5.5 auf Windows-Rechner installieren

Installer-Paket downloaden.

 

MySQL Installation

Nach dem Herunterladen der msi-Datei auf [ Ausführen ] klicken.
 

MySQL Installation

Auf [ Next ] = weiter klicken,

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

1  

MySQL Installation

Multi Delete

Wenn man Datensätze löschen möchte, die Bedingungen aus mehren Tabellen entsprechen sollen, so kann man diese Bedingungen in der DELETE-Anweisung angeben.

/* Lösche alle Datensätze aus den tmp-Tabellen für menu_name='catmenu_pcdino' */
$select = "DELETE k.* FROM ".TABLE_TMP_AP_MENU_ITEM_KEYWORDS." k, "
          .TABLE_TMP_AP_MENU_ITEMS." i "
          ." WHERE k.menu_item_id=i.id AND i.menu_name='".$catmenu."'";

Bei der Verwendung von mehreren Schemas innerhalb des gleichen Datenbankservers (der angmeldete DB-User hat alle Rechte auf den Tabellen der anderen Schemas), tritt allerdings bei Aufruf des SELECT's über PHP eine Fehler auf, welcher bei direkten Aurfuf der Anweisung in MySQL-Workbench nicht auftritt.

Error: Unknown table 'k' in MULTI DELETE

Der Fehler tritt nur auf, wenn sich diese Tabelle nicht im Standardschema befindet.

 

 

mehrere Datenbanken für ein Projekt

 

Bei kleinerem Webspace gibt es oft nur eine Datenbank, um dort verschiedene Projekte zu trennen wird dann mit Prefixen gearbeitet.

In diesem Fall handelt es sich um ein größeres Projekt, auf einem virtuellem Server. Die logische Unterteilung der einzelnen Bereiche - Stammdaten - Produktdaten - Hilfstabellen war ursprünglich durchaus überschaubar, zwischenzeitlich ist die Anzahl der Tabellen, insbesondere der Hilfstabellen, so hoch, dass ich einen Auslagerung in eine 2. (ggf. auch in eine 3. Datenbank) in Erwägung ziehe.

Was will ich erreichen?

Die 1. Datenbank soll nur noch die Daten enthalten, die nicht neu eingelesen werden können. Das sind z.B. manuelle Eingaben von Passwörtern, Konfigurationen, ...

Die 2. Datenbank enthält die produktiven Daten, also Daten die für die Anzeige speziell (aber automatisch vom Programm) aufbereitet sind.

Die 3. Datenbank enthält "nur" Hilfstabellen, die für die Erstellung der produktiven Daten benötigt werden.

Die 1. Datenbank soll besonders gesichert werden, weil diese Daten nicht so einfach wiederhergestellt werden können.

Die Ansteuerung soll dabei so erfolgen, dass bei einem ggf. weiterem Anwachsen des Projektes die Datenbanken auch auf unterschiedlichen Servern verteilt werden könnten.

Datenbanken auf unterschiedlichen Servern

Ais Performancegründen kann es ggf. sinnvoll sein die Datenbanken zu trennen. Insbesondere die Hilfstabellen, die für die Anzeige der Seiten im Internet nicht mehr benötigt werden, die Datenaufbereitung erfolgt in mehreren CRON-JOBs, könnten gut ausgelagert werden.

Ob eine solche Auslagerung - allein durch die geringere Größe der Datenbank (ohne Hilfstabellen) bereits eine Entlastung für das Frontend bringt, kann ich nicht so ohne weiteres prüfen. Möglich wäre das aber.

Ein "Mehr" an Übersichtlichkeit alleine würde den dazu notwendigen Aufwand allerdings nicht rechtfertigen.

Wenn allerdings eine Trennung Frontend - Backend / CRON-Jobs aus anderen Gründen sinnvoll ist, z,B. CPU, Speicherauslastung, würde diese Variante durchaus interessant sein.

Für den unterschiedlichen Zugriff muss dabei für jede Datenbank ein DB-Connect erzeugt werden, dieser DB-connect wird dann als 2. Parameter bei allen Abfragen übergeben. 

Wenn mit dem gleichen Verfahren verschiedene Datenbanken auf dem gleichen Server ansgesprochen werden sollen, muss der DB-Connect mit dem Paramter TRUE aufgerufen werden.

$con = mysql_connect($server, $user, $pass, TRUE);

Der 4. Parameter TRUE bewirkt, dass php einen neuen Connect aufzubaut und nicht versucht einen bereits bestehende Connect zu verwenden, der mit den gleichen Parametern aufgerufen wurde.
Alternativ dazu gäbe es auch die Möglichkeit auf dem Server mit verschiedenen Usern zu arbeiten.

Aktuell scheint mir aber hier der Aufwand zu hoch. Plan B muss her.

Datenbanken auf dem selben Servern

Bei Verwendung des Datenbanknamens (Schemas) vor den entsprechenden Tabellennamen wäre in diesem Projekt der "Programmieraufwand" überschaubar, weil nur die Tabellennamen in der database.php um genau diese Schema ergänzt werden müssten.

Voraussetzung dafür, dass es funktioniert ist der gleiche DB-Connect, also auch user und passwort müssen übereinstimmen. Lokal ist das alles kein Problem, auf einem einfachem Webspace vermutlich schon.

Auf einem virtuellem Server, mit admin-Rechten auf der Datenbank kann man mit phpMyAdmin (mit dem Superuser oder einem User der das Amin-Recht GRANT besitzt) die Rechte für eine Datenbank zusätzlich an andere User übertragen. 

Diese Lösung bietet, nur ein mehr an Übersichtlichkeit und eine einfachere Datensicherung, aber aktuell ist das wohl noch ausreichend.

 

Quellen

  1. http://www.tutorials.de/php/22391-problem-mehrere-datenbanken-ueber-klasse.html
  2. http://www.php.net/manual/de/function.mysql-select-db.php

 

 

 

 

 

 

 

MySQL - kumulierte Summe

Für die Abrechung der Einnahmen und Ausgaben für den Kleingärtnerverein werden kummulierte Summen benötigt. Diese könnte man natürlich auch bei der Eingabe errechnen und abspeichern, allerdings müsste bei eventuellen Korrekturen, dieses Feld jeweils neu berechnet werden, für alle nachfolgenden Datensätze.
 
Ganz abgesehen davon gilt es redundante Daten zu vermeiden!
 
D.h. alles was sich aus den bestehenden Daren errechnen lässt, sollte nur dann zusätzlich abgespeichert werden, wenn dies aus wichtigen Gründen (z.B. Zugriffszeiten) sinnvoll ist.
 
Für die Abfrage mit MySQL wird ein Subselect verwendet, welches über die id alle bisherigen Felder des Buchungsjahres bis zur id des jeweiligen Eintrages addiert.    

SELECT
  a.*,
 
  (SELECT SUM(b.betrag) FROM garten_ausgaben b
  WHERE b.id <= a.id AND b.buchungsjahr=2011) AS 'kumulative Summe'

FROM

  garten_ausgaben a 

WHERE 

  a.buchungsjahr = 2011

ORDER BY a.id
^