ferrytoweb.info


Erstellen einer Tabelle


Wir erstellen die Tabelle KUNDE

Wir erweitern unser kleines Programm mit dem Anlegen der Tabelle Kunde, wobei wir die Beispieldaten aus dem Abschnitt Das ERM verwenden.
<?php
#
# sqlite3versuche.php
#

# Datenbank-Session eröffnen
$myfirstdb = new SQLite3('myfirstdb.db');

# Tabelle "Kunde" anlegen

$CrTblKunde = 'create table if not exists Kunde
  ( psk integer primary key autoincrement
  , loginname string
  , passwort  string
  , name      string
  , vorname   string
  , email     string
  )'; 

$myfirstdb->exec($CrTblKunde); # SQL-Statement ausführen
...
$myfirstdb->close();
# Datenbank-Session beendet

?>
Aus Sicht von PHP passiert folgendes: $myfirstdb ist das SQLite3-Objekt (unsere Datenbank) und die Methode exec() erwartet als Parameter ein SQL-Statement, um dieses auszuführen.
In SQL spricht man von "Statement" anstatt von "Anweisung".
Im Programm habe ich das Statement der Variablen $CrTblKunde zugewiesen anstatt es gleich in die Klammern von exec() zu schreiben. Dafür steht die Variable als Parameter drin. Dies erschien mir übersichtlicher.

Das Statement CREATE TABLE

Aus Sicht der SQL-Datenbank wird nur ein CREATE TABLE-Statement ausgeführt, um eine (leere) Tabelle mit dem Namen Kunde zu erzeugen.
Das Statement ist nach folgendem Muster (sprich: Standard) aufgebaut:
CREATE TABLE Tabellenname (Spalte1, Spalte2, ...)
Man listet in den Klammern alle Spalten mit Komma getrennt auf, die die Tabelle erhalten soll. Dabei gibt man je Spalte mindestens diese zwei Werte an:
Spaltenname Typangabe
Im Beispiel hat die 1.Spalte den Namen psk. Das steht für "Primärschlüssel des Kunden".
Als Werte sollen ganze Zahlen verwendet werden, daher seht dahinter die Typangabe INTEGER, was eben "numerisch ganzzahlig" bedeutet.
Alle anderen Spalten der Tabelle (loginname, passwort, ...) sind vom Typ "Zeichenkette", und den gibt man bei SQLite3 einfach mit STRING an.
Nun fällt auf, dass das obige Muster des Statements einzeilig geschrieben ist, mein Statement aber mehrzeilig. Das ist so ziemlich allen Datenbanken, die SQL verstehen, egal. Daher kann man es so schreiben, dass man selbst einen guten Überblick hat. Weiterhin schreibt der Standard vor, dass Schlüsselwörter (wie CREATE TABLE) mit Großbuchstaben zu schreiben sind, aber auch die Kleinschreibung wird von den Datenbanken akzeptiert und ist in SQL-Scripten üblich.
Eine weitere Besonderheit ist die Einfügung IF NOT EXISTS vor dem Tabellennamen. Das veranlasst die Datenbank, die gewünschte Tabelle nur dann anzulegen wenn sie noch nicht existiert. Ein prima Feature, dadurch können wir nämlich das Programm bedenkenlos wiederholt ausführen.
Bei Spaltennamen können nach der Typangabe weitere Angaben folgen, sogenannte Constraints (wörtlich "Einschränkungen"). So gibt es bei der Spalte psk das Constraint PRIMARY KEY. Damit weis auch die Datenbank (und nicht nur wir), dass die betreffende Spalte ein Primärschlüssel sein soll.
Übrig ist jetzt noch das Constraint AUTOINCREMENT. Wie im Abschnitt Das ERM erklärt, sind Primärschlüssel häufig nichts anderes als eine laufende Nummerierung. Die Datenbank kann diese Nummerierung selbst erledigen, man muss eben nur AUTOINCREMENT angeben.
Bei Ausführung des Programms erhalten wir nach wie vor keine Ausgabe, aber die Datenbankdatei ist nicht mehr leer, sie enthält jetzt die Tabelle, die allerdings noch keine Zeilen (Datensätze) enthält.
C:\xampp\htdocs\Versuche\PHP>php sqlite3versuche.php

C:\xampp\htdocs\Versuche\PHP>dir
...
12.03.2017  12:46            12.288 myfirstdb.db
...