Hauptmenü

Untermenü

Advanced SQL - Einstiegstutorial 1 - Die Standardtabellen

1. Die Abschnitte

2. Hödelpups?

Na ja, so wirklich anspruchsvoll ist das hier nicht. Bis auf eine Ausnahme. Wir legen diesmal großen Wert auf einen geringen Speicherverbrauch unserer Tabellen. Und zwar beim Primärschlüssel. Denn da kann man viel einsparen, wenn man sich vorher ein paar Gedanken über die mögliche Anzahl von Einträgen macht.

unsigned

Wie ihr hoffentlich wisst, haben Spalten vom Typ "Zahl" automatisch einen Wertebereich von -X bis +X. Das wollen wir diesmal komplett verbieten, um den Speicherbedarf optimal auszunutzen. Also werden alle Primärschlüssel damit ausgezeichnet. Außerdem gibt es da noch ein paar Details, auf die man achten muss. Aber dazu erfahrt ihr mehr unter dem Punkt Feinheiten.

3. Die Tabellen

... liste ich zuerst mal nur komplett auf. Die Details kommen im Anschluss.


DROP TABLE IF EXISTS gilde;
CREATE TABLE gilde
(
  id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(128),
  einnahmen MEDIUMINT NOT NULL,
  PRIMARY KEY (id)
) ENGINE=INNODB;

DROP TABLE IF EXISTS wesen;
CREATE TABLE wesen
(
  id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  wesen VARCHAR(128),
  PRIMARY KEY (id)
) ENGINE=INNODB;

DROP TABLE IF EXISTS stufe;
CREATE TABLE stufe
(
  id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  stufe VARCHAR(128),
  PRIMARY KEY (id)
) ENGINE=INNODB;

DROP TABLE IF EXISTS status;
CREATE TABLE status
(
  id ENUM('1','2'NOT NULL DEFAULT 2,
  status VARCHAR(128),
  UNIQUE KEY(id)
) ENGINE=INNODB;

Erläuterung

SMALLINT und TINYINT

Wie ich schon sagte, achten wir diesmal auf den Speicherbedarf. Die Tabelle gilde kann also maximal 65.535 Einträge enthalten. Gut bei World of Warcraft gibt es sicher ein paar mehr, aber das soll uns nicht jucken. Bei den beiden Tabellen wesen und stufe sind es nur maximal 255 Einträge. Aber jeder, der schon mal solche Rollenspiele gezockt hat, weiß, dass man da nicht mehr benötigt.

ENUM

Diesen Spaltentyp habe ich euch bisher gänzlich unterschlagen. Dabei können normalerweise Einträge nur die Werte erhalten, die man innerhalb von ENUM angegeben hat, also hier 1 und 2. Ein NULL wäre auch noch möglich, wenn wir das hier mit NOT NULL nicht abgeklemmt hätten.

Ohne Angabe für DEFAULT wird bei einem nicht vorhandenen Eintrag für die Spalte ein Leerwert abgespeichert. Wenn man nicht im Strict-Modus ist, aber dazu äußere ich mich bei den kommenden Praxistutorials.

Eine weitere Feinheit gibt es noch. Bei den Angaben zu ENUM muss man die Werte immer in Anführungszeichen oder Hochkommata setzen. Bei der Angabe eines Default-Wertes kann man bei Zahlen dagegen darauf verzichten. Um aber zu verhindern, dass man hier mehr als zwei Einträge vornehmen kann, wird die Spalte id noch mit einem UNIQUE KEY versehen.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt