ReLast - Klassik


MySQL


Architektur

Mögliche Verwirrung: MySQL hat einen root-user. Dieser hat nichts mit dem Unixoiden "root" zu tun, sondern dient als Super-Admin nur für das DBMS.

Administration

mysqladmin

mysqladmin verwenden und als root eine Beispieldatenbank anlegen:

mysqladmin -u root -h localhost create beispieldatenbank

Mit Passwortangabe (Passwort wird danach abgefragt):

mysqladmin -u root -p -h localhost create beispieldatenbank

mysql

Als root an localhost anmelden

mysql -u root -h localhost
mysql -u root -p -h localhost

Dem Beispielbenutzer alle Rechte auf die Beispieldatenbank geben (Benutzer wird damit erstellt)

GRANT ALL ON beispieldatenbank.* TO beispieluser@localhost IDENTIFIED BY "beispielpasswort";

Datenbanken anzeigen

show databases;

Verlassen

exit

Als Beispielbenutzer an localhost anmelden

mysql -u beispieluser -h localhost -p

Datenbanken anzeigen

show databases;

Tabellen anzeigen

SHOW TABLES FROM beispieldatenbank;

Datenbank auswählen (als aktive/zu benutzende)

use beispieldatenbank;

Tabellen anzeigen

show tables;

Verlassen

exit

Tabellen anlegen

Erstelle eine leere Tabelle mit den gleichen Spalten wie eine vorhandene:

CREATE TABLE neuetabelle LIKE originaltabelle;

Erstelle eine Tabelle aus einem SELECT-Statement einer vorhandenen:

CREATE TABLE neuetabelle AS SELECT * FROM originaltabelle;

Erstelle eine Tabelle wenn noch nicht vorhanden:

CREATE TABLE IF NOT EXISTS personen (
	person_id INT(10) AUTO_INCREMENT PRIMARY KEY,
	vorname VARCHAR(50),
	nachname VARCHAR(50),
	geburtsdatum DATE,
	email VARCHAR(50),
	fk_adresse_id INT(10)
	updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
);
CREATE TABLE IF NOT EXISTS adressen (
	adresse_id INT(10) AUTO_INCREMENT PRIMARY KEY,
	strasse VARCHAR(100),
	plz VARCHAR(10),
	ort VARCHAR(100),
	land VARCHAR(100),
	updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
);

Tabellen befüllen

INSERT INTO adressen (strasse,plz,ort,land) VALUES ('Musterstraße 13', '01234', 'Musterstadt', 'Musterland');

Datensätze ändern

UPDATE adressen SET strasse = 'Neuestrasse', plz = 'Neueplz', ort = 'Neuerort', land = 'Neuesland';

Tabellen abfragen

Select ... FROM ...
SELECT * FROM personen;
SELECT person_id, vorname, nachname FROM personen;
SELECT id AS Personalnummer, vorname, nachname FROM personen;
SELECT DISTINCT vorname AS Vornamen FROM personen;
SELECT DISTINCT vorname AS Vornamen FROM personen ORDER BY vornamen;
Select ... FROM ... WHERE ...
SELECT vorname, nachname FROM personen WHERE id=5;
SELECT t1.nachname, t2.* FROM personen AS t1, adressen AS t2
  WHERE t1.fk_adresse_id = t2.adresse_id;
SELECT personen
LEFT JOIN adressen ON personen.fk_adresse_id = adressen.adresse_id;
SELECT * 
FROM personen
WHERE fk_adresse_id IN
(SELECT adresse_id FROM adressen);

Tabelle umbenennen

RENAME TABLE personen TO person;

Tabelle löschen

DROP TABLE person;

mysqlimport

mysqldump

perror

mysqlshow

Trigger

Partitionierung

Range-Partitionierung

CREATE TABLE `kunde` (
  region int NOT NULL,
  nr int NOT NULL,
  name char(30),
  ed date NOT NULL,
)
PARTITION BY range(region) (
  PARTITION p0 VALUES LESS THAN (10),
  PARTITION p1 VALUES LESS THAN (20),
  PARTITION p2 VALUES LESS THAN (30)
);
CREATE TABLE `kunde` (
  region int NOT NULL,
  nr int NOT NULL,
  name char(30),
  ed date NOT NULL
)
PARTITION BY range(year(ed)) (
  PARTITION p0 VALUES LESS THAN (1990),
  PARTITION p1 VALUES LESS THAN (2000),
  PARTITION p2 VALUES LESS THAN maxvalue
);

List-Partitionierung

CREATE TABLE `kunde` (
  region int NOT NULL,
  nr int NOT NULL,
  name char(30),
  ed date NOT NULL
)
PARTITION BY list(region) (
  PARTITION p0 VALUES IN (1, 3, 5 ),
  PARTITION p1 VALUES IN (2, 4, 6 ),
  PARTITION p2 VALUES IN (10, 11, 12 )
);

Hash-Partitionierung

CREATE TABLE `kunde` (
  region int NOT NULL,
  nr int NOT NULL,
  name char(30),
  ed date NOT NULL
) 
PARTITION BY hash(region) PARTITIONS 4;

Key-Partitionierung

CREATE TABLE `kunde` (
  nr int NOT NULL primary key,
  name char(30),
  ed date NOT NULL
)
PARTITION BY key() PARTITIONS 4;

Copyright © 2024

Datenschutz | Impressum