| |
| * Link führt ins Internet |
|
| |
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(). |
|
|
|
|
|
|
|