Mac: Lokaler Docker MySQL Server verbinden

Um lokal einen MySQL Server mit Docker zu starten und sich anschließend über einen weiteren MySQL Docker Container mittels MySQL Client zu verbinden, müssen sich beide Container im selben (Docker-)Netzwerk befinden.
Dies kann u.a. erreicht werden, indem beim Starten des zweiten Containers, das Netzwerk des ersten Containers angegeben wird.

Am Beispiel von MySQL 5.7

docker run --name local-mysql57 -e MYSQL_ROOT_PASSWORD=topsecret -d mysql:5.7

docker run -it --network container:local-mysql57 --rm mysql:5.7 mysql -h127.0.0.1 -uroot -p

Siehe auch:
https://hub.docker.com/_/mysql
https://docs.docker.com/network/#container-networks

How to fetch field(s) from MySQL query result in bash


In case you want to fetch/export the result of a mysql query into a text file, but you don´t have the option to use the OUTFILE command you can simple use the following bash command:

:~$ mysql -u USER -p PASSWORD -h HOST --silent --skip-column-names -e 'select field1, field2, field3 from table' > query-result.csv

Compare a set of database table data on different servers


How may you validate, that data on different databases equal each other?
Execute the following (mysql) query on each database. You will get an MD5 string which is easily to be compared.

SELECT MD5( SUM( ch ) )
FROM (
SELECT crc32( MD5( CONCAT_WS( ',',
field1, field2, field3
) ) ) AS ch
FROM tablename
WHERE field0 = 3
)a

PS: Insert into the field list only fields which should be compared.
E.g. Do not include auto increment or timestamp/date columns if they are allowed to be different on each database!

MySQL: SQL_CALC_FOUND_ROWS statt zusätzlichem „Count()“-Query


Statt eines zusätzlichen Count-Queries (z.B. für eine Paginierung) kann SQL_CALC_FOUND_ROWS verwendet werden:

Anzahl der Gesamt-Datensätze (die auf das Kriterium passen) mit separatem Count-Query:
SELECT f1, f2, f3 FROM t WHERE t.f1 > 0 LIMIT 0,20;
SELECT count(f1) as sum FROM t WHERE t.f1 > 0;

Anzahl der Gesamt-Datensätze (die auf das Kriterium passen) ohne zusätzliches Count-Query:
SELECT SQL_CALC_FOUND_ROWS f1, f2, f3 FROM t WHERE t.f1 > 0 LIMIT 0,20;
SELECT FOUND_ROWS() AS sum;

Die Variante mit SQL_CALC_FOUND_ROWS ist insbesondere bei komplexen Queries sehr hilfreich, da hierbei das Query für den Count nicht dupliziert (und zukünftig mehrfach bei Änderungen gepflegt werden muss). Abgesehen davon ist diese Variante wesentlich schneller.

Datenbank Feldtypen und Speichergrößen


Felddatentyp numerisch Speicher-
größe in Byte
Beschreibung
TINYINT[(Länge)] 1 Ganzzahl-Wertebereich:
-128 bis 127 bzw. 0 bis 255
SMALLINT[(Länge)] 2 Ganzzahl-Wertebereich:
-32.768 bis 32.768 bzw.
0 bis 65.535
MEDIUMINT[(Länge)] 3 Ganzzahl-Wertebereich:
-8.388.608 bis 8.388.608 bzw.
0 bis 4.294.967.295
INT[(Länge)]/
INTEGER[(Länge)]
4 Ganzzahl-Wertebereich: -2.147.483.648 bis 2.147.483.647 bzw.
0 bis 4.294.967.295
BIGINT[(Länge)] 8 Ganzzahl-Wertebereich: -9.223.372.036.854.775.807 bis 9.223.372.036.854.775.807 bzw. 0 bis 18.446.744.073.709.551.615
REAL[(Länge, Dezimalstellen)]/
DOUBLE[(Länge, Dezimalstellen)]
8 Fließkommazahl
FLOAT[(Länge, Dezimalstellen)] 4 Fließkommazahl
DECIMAL[(Länge, Dezimalstellen)]/
NUMERIC[(Länge, Dezimalstellen)]
ungepackte Fließkommazahl mit Vorzeichen, Zahlen werden als Zeichenketten gespeichert

Alle Felddatentype können mit folgenden Parametern ergänzt werden:

  • [UNSIGNED] – Vorzeichen wird vernachlässigt
  • [ZEROFILL] – Fehlende Werte werden mit Null aufgefüllt
Felddatentyp
Zeichenkette
Speicher-
größe in Byte
Beschreibung
CHAR(Länge) [BINARY] 1 bis 255 Zeichenkette Länge: 1 bis 255
VARCHAR(Länge) [BINARY] variabel Zeichenkette variabler Länge
TINYBLOB/
TINYTEXT
BLOB oder TEXT mit max. 255 Zeichen
BLOB/
TEXT
BLOB oder TEXT mit max. 65.535 Zeichen
MEDIUMBLOB/
MEDIUMTEXT
BLOB oder TEXT mit max. 16.777.215 Zeichen
LONGBLOB/
LONGTEXT
BLOB oder TEXT mit max. 4.294.967.295 Zeichen
ENUM(Wert1, Wert2, …) Aufzählung. Max 65.535 Einzelwerte in einer Liste
SET(Wert1, Wert2, …) Wie ENUM, aber max 64 Einzelwerte in einer Liste
Felddatentyp
Datum
Speicher-
größe in Byte
Beschreibung
DATE 3 Datum vom Typ YYYY-MM-DD
DATETIME 8 Datum vom Typ YYYY-MM-DD HH:MM:SS
TIME 3 Zeit vom Typ HH:MM:SS
TIMESTAMP 4 UNIX Zeitstempel
YEAR 1 Jahr vom Typ YYYY