Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  PHP & MySQL-Zugriffe
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  

 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 79.000 Beiträgen finden Sie sicher die passende Antwort!  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 



 

Datenbanktabelle erstellen




Nachdem Sie nun eine Datenbank erstellt haben, sollten Sie eine Tabelle erzeugen. Eine Tabelle wird mit Hilfe der Funktion mysql_db_query() erzeugt. Das folgende Skript sorgt dafür, dass Ihnen die Tabelle Mitglieder innerhalb der Datenbank Verein zur Verfügung gestellt wird.



<?php

// Signalvariable
$db_vorhanden false;

// Verbindung zum MySQL-Server
$db mysql_connect ("localhost""matthias""");

// Erfassen sämtlicher Datenbanken
$datenbanken mysql_list_dbs($db);

// Anzahl von Datenbanken
$anzahl mysql_num_rows($datenbanken);

// Auflisten sämtlicher Datenbanken
for ($i 0$i $anzahl$i++) {
   if (
mysql_result($datenbanken$i) == "verein") {
       
$db_vorhanden true;
   }
}

// Sollte die Datenbank nicht vorhanden sein
// wird diese mit Hilfe von mysql_create_db erzeugt
if (!$db_vorhanden) {
    if (
mysql_create_db("verein"$db)) {
        
$db_vorhanden true;
    }
}

// Tabellenfelder definieren
$SQL_Befehl "CREATE TABLE Mitglieder (
MitgliedID INTEGER NOT NULL AUTO_INCREMENT,
MitgliedVorname CHAR(40),
MitgliedNachname CHAR(40),
Aufgabe CHAR(40),
Geburtsdatum DATE,
PRIMARY KEY (MitgliedID)
)"
;

// Tabelle erzeugen und prüfen
if ($db_vorhanden) {
    if (
mysql_db_query("verein"$SQL_Befehl)) {
        echo 
"Tabelle erzeugt!";
    } else {
        echo 
"Fehler beim Anlegen der Tabelle: " mysql_error ();
    }
}

// Verbindung beenden
mysql_close($db);

?>



Das Skript erscheint Ihnen vielleicht etwas lang. Die vielen Sicherheitsabfragen führen dazu, dass das Skript schnell an Umfang gewinnt. Bei Prozessen, die vom Erfolg anderer Prozesse abhängig sind, sollten Sie jedoch immer prüfen, ob der vorhergehende Prozess samt Operationen erfolgreich abgeschlossen wurde oder nicht. Es wird überprüft, ob die Datenbank, die erzeugt werden soll, bereits vorhanden ist. Sollte dies nicht der Fall sein, wird diese erzeugt. Anschließend ist wieder zu überprüfen, ob die Datenbank erfolgreich erzeugt werden konnte. Dann kommt es zur Festlegung der Tabellenfelder und deren Datentypen, Mit Hilfe der Funktion mysql_db_query() wird der MySQL-Befehl, welcher für die Erzeugung der Tabelle Mitglieder verantwortlich ist, am Ende ausgeführt.

Sollte die Tabelle bereits vorhanden sein, erhalten Sie folgende Fehlermeldung:
Fehler beim Anlegen der Datenbank: Table 'mitglieder' already exists


Primärschlüsselfeld

Die vorliegende Tabelle enthält noch eine Besonderheit und zwar einen Primärenschlüssel, welcher durch die MitgliedID symbolisiert wird. Eine Tabelle benötigt in der Regel einen Primärenschlüssel, über den der einzelne Datensatz eindeutig identifiziert werden kann. Sie können hierfür mehrere Spalten einsetzen. Sinnvoller sind jedoch meist einzelne Felder zu verwenden. Mit dem Zusatz PRIMARY KEY erklären Sie das zuvor definierte Feld MitgliedID zum Schlüsselfeld. Hier sind dann automatisch nur noch eindeutige Einträge zulässig. Der Zusatz NOT NULL legt fest, dass dieses Feld nicht leer bleiben darf. Der Anwender ist somit gezwungen, hier einen Wert einzugeben.


Primärschlüsselfeld und AUTO_INCREMENT

Das Problem, in ein Schlüsselfeld immer eindeutige Einträge eingeben zu müssen, lässt sich mit Hilfe von AUTO_INCREMENT lösen. Sobald ein Feld als auto_increment-Feld daklarierte wurde, werden beim hinzufügen neuer Datensätze, automatisch passende Einträge in dem Feld eingesetzt. Der Anwender muss sich um dieses Feld gar nicht mehr kümmern. MySQL ermittelt automatisch den bisher höchsten Eintrag und erhöht diesen um den Wert 1. Diese Lösung des Problems stellt den bequemste und gleichzeitig den sichersten Weg dar.


Datentypen

MySQL unterstützt eine Reihe von Spaltentypen, die in drei Kategorien unterteilt werden können: Numerische Typen, Datums- und Zeit-Typen sowie Zeichenketten-Typen.

Der jeweilige Typ sollte möglichst genau auf die Daten abgestimmt sein, die Sie speichern wollen. Durch die Spaltentypen erhalten Sie eine gewisse Eingabekontrolle, da falsche Daten eventuell schon bei der Eingabe mit einer Fehlermeldung abgewiesen werden. Wenn ein Feld beispielsweise nur ganzzahlige Werte enthalten soll, ist der Typ INTEGER zu wählen.

Hier eine Zusammenstellung der wichtigsten Spaltentypen (Datentypen):

Typ Bedeutung
TINYINT Eine sehr kleine Ganzzahl. Der vorzeichenbehaftete Bereich ist -128 bis 127, der vorzeichenlose Bereich ist 0 bis 255.
SMALLINT Eine kleine Ganzzahl. Der vorzeichenbehaftete Bereich ist -32768 bis 32767, der vorzeichenlose Bereich ist 0 bis 65535.
MEDIUMINT Eine Ganzzahl mittlerer Größe. Der vorzeichenbehaftete Bereich ist -8388608 bis 8388607, der vorzeichenlose Bereich ist 0 bis 16777215.
INT/INTEGER Eine Ganzzahl normaler Größe. Der vorzeichenbehaftete Bereich ist -2147483648 bis 2147483647, der vorzeichenlose Bereich ist 0 bis 4294967295.
BIGINT Eine große Ganzzahl. Der vorzeichenbehaftete Bereich ist -9223372036854775808 bis 9223372036854775807, der vorzeichenlose Bereich ist 0 bis 18446744073709551615.
FLOAT Eine kleine Fließkommazahl (einfacher Genauigkeit). Der Wertebereich umfasst -3.402823466E+38 bis -1.175494351E-38, 0 und 1.175494351E-38 bis 3.402823466E+38.
DOUBLE / REAL Eine normal große Fließkommazahl (doppelter Genauigkeit). Der Wertebereich umfasst -1.7976931348623157E+308 bis -2.2250738585072014E-308, 0 und 2.2250738585072014E-308 bis 1.7976931348623157E+308.
DATE Ein Datum. Der unterstützte Wertebereich ist '1000-01-01' bis '9999-12-31'. MySQL zeigt DATE-Werte im 'YYYY-MM-DD'-Format an, gestattet jedoch, DATE-Spalten Werte als Zeichenkette oder als Zahl zuzuweisen.
DATETIME Eine Datums-/Zeit-Kombination. Der unterstützte Wertebereich ist '1000-01-01 00:00:00' bis '9999-12-31 23:59:59'. MySQL zeigt DATETIME-Werte im 'YYYY-MM-DD HH:MM:SS'-Format an, gestattet jedoch, DATETIME-Spalten Werte als Zeichenkette oder als Zahl zuzuweisen.
TIMESTAMP Ein Zeitstempel. Der Wertebereich ist '1970-01-01 00:00:00' bis irgendwann im Jahr 2037.
TIME Ein Zeit-Typ. Der Wertebereich ist '-838:59:59' bis '838:59:59'. MySQL zeigt TIME-Werte im 'HH:MM:SS'-Format an, gestattet jedoch, TIME-Spalten Werte entweder als Zeichenkette oder als Zahle zuzuweisen.
CHAR Eine Zeichenkette fester Länge, die beim Speichern rechts stets und mit Leerzeichen bis zur angegebenen Länge aufgefüllt wird. Der Wertebereich liegt zwischen 1 bis 255 Zeichen.
VARCHAR Eine Zeichenkette variabler Länge. Der Wertebereich liegt zwischen 1 bis 255 Zeichen.
TINYBLOB / TINYTEXT Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 255 (28 - 1) Zeichen.
BLOB / TEXT Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 65535 (216 - 1) Zeichen.
MEDIUMBLOB / MEDIUMTEXT Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 16777215 (224 - 1) Zeichen.
LONGBLOB / LONGTEXT Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 4294967295 (232 - 1) Zeichen.


Bei der Definition von Feldern ist neben der Typangabe gelegentlich auch noch die Feldlänge anzugeben. Das gilt vor allem für die Typen CHAR und VARCHAR.

MitgliedNachname CHAR(40)

Bei ganzzahligen Typen, wie INTEGER (INT), SMALLINT und BIGINT können Sie mit UNSIGNED noch bestimmen, ob ein Wert mit oder ohne Vorzeichen dargestellt werden soll:

ProduktNr INTEGER UNSIGNED

Für Felder, wie MitgliedID, welche lediglich positive Werte enthalten, kann es sinnvoll sein, UNSIGNED zu verwenden.


Speicherbedarf von Spaltentypen

Der Speicherbedarf jedes Spaltentyps, der von MySQL unterstützt wird, ist unten nach Kategorie sortiert aufgelistet:


Speicherbedarf für numerische Typen



Spaltentyp Speicherbedarf
TINYINT 1 Byte
SMALLINT 2 Bytes
MEDIUMINT 3 Bytes
INT 4 Bytes
INTEGER 4 Bytes
BIGINT 8 Bytes
FLOAT(X) 4, wenn X <= 24, oder 8, wenn 25 <= X <= 53
FLOAT 4 Bytes
DOUBLE 8 Bytes
DOUBLE PRECISION 8 Bytes
REAL 8 Bytes
DECIMAL(M,D) M+2 Bytes, wenn D > 0, M+1 Bytes, wenn D = 0 (D+2, wenn M < D)
NUMERIC(M,D) M+2 Bytes, wenn D > 0, M+1 Bytes, wenn D = 0 (D+2, wenn M < D)


Speicherbedarf für Datums- und Zeit-Typen

Spaltentyp Speicherbedarf
DATE 3 Bytes
DATETIME 8 Bytes
TIMESTAMP 4 Bytes
TIME 3 Bytes
YEAR 1 Byte


Speicherbedarf für Zeichenketten-Typen

Spaltentyp Speicherbedarf
CHAR(M) M Bytes, 1 <= M <= 255
VARCHAR(M) L+1 Bytes, wobei L <= M und 1 <= M <= 255
TINYBLOB, TINYTEXT L+1 Bytes, wobei L < 2^8
BLOB, TEXT L+2 Bytes, wobei L < 2^16
MEDIUMBLOB, MEDIUMTEXT L+3 Bytes, wobei L < 2^24
LONGBLOB, LONGTEXT L+4 Bytes, wobei L < 2^32
ENUM('wert1','wert2',...) 1 oder 2 Bytes, abhängig von der Anzahl der Aufzählungswerte (65535 Werte maximal)
SET('wert1','wert2',...) 1, 2, 3, 4 oder 8 Bytes, abhängig von der Anzahl an SET-Elementen (64 Elemente maximal)



Anzahl der Datenbanktabellen in einer Datenbank

Sollten Sie in Erfahrung bringen wollen, wie viele Datenbanktabellen innerhalb einer Datenbank vorhanden sind können Sie folgendes Skript einsetzen, um eine Auflistung zu erhalten.



<?php
$db 
mysql_connect ("localhost:3306""matthias""")
  or die (
"keine Verbindung möglich: " .mysql_error());

// Erfassen sämtlicher Tabellen
$tabellen mysql_list_tables("verein");

// Anzahl von Tabellen
$anzahl mysql_num_rows($tabellen);

// Auflisten sämtlicher Tabellen der Datenbank Verein
for ($i 0$i $anzahl$i++) {
        echo 
mysql_result($tabellen$i);
        echo 
"<br>";
}

// Verbindung beenden
mysql_close ($db);
?>



Hinweis: Die Funktion mysql_list_tables() geht hierbei ähnlich vor wie die Funktion mysql_list_dbs().



 


Datenbank erstellen
 




 sponsored by

Host Europe


HighText iBusiness


Host Europe




© 2001-2006 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005-2006 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de