MySQL
Introduction
1.jpg
Case-Sensitiveness
| Typ | Case-sensitive |
| reserved word | no |
| name of tables | depends on file system:*unter Windows nein |
| name of column | no |
| Vergleiche von Inhalten | no (except blob) |
Man sollte auch bedenken, daß es eventuell später bei einer Konvertierung in ein anderes Datenbankformat das konvertierende Programm vielleicht Groß/Kleinschreibung nicht unterscheiden kann.
Column Types
| BOOL | Synonym zu TINYINT(1), 0 ist FALSE, sonst TRUE | |
| BOOLEAN | s. BOOL | |
| TINYINT[(<Length>)] | 1 Byte | |
| SMALLINT | ||
| MEDIUMINT | ||
| INT | s. INTEGER | |
| INTEGER[(<Length>)] | ||
| 4 Bytes | ||
| BIGINT | ||
| FLOAT(<precision>) | ||
| FLOAT | ||
| DOUBLE | ||
| REAL | ||
| DECIMAL[(<DecimalDigits>[,<Precision>])] | ||
| NUMERIC | ||
| DATE | ||
| DATETIME | ||
| TIMESTAMP | ||
| TIME | ||
| YEAR | ||
| CHAR([1-255]) | ||
| VARCHAR[(<MaxLength>)] | Länge+1Byte | |
| TINYTEXT | maximum length of 255 (2^8 - 1) characters | |
| TEXT | unendliche Länge | |
| MEDIUMTEXT | ||
| LONGTEXT |
Formate von Column Types
| Datentyp | Format |
| INT | 111-32 |
| FLOAT | 22.23-434.23e+10 |
Installation and Start
Windows
Server
mysql-shareware.exe –standalone mysqld –standalone
Client
mysql [--host=<IP>] [--user=<user>] --password=<password> Achtung: wenn nur der user angegeben wird, dann gibt es keine Nachfrage nach einem Passwort, sondern man arbeitet einfach unter sehr eingeschränkten Berechtigungen.
Service
Um MySQL als Service zu installieren, muss die Datei C:\My.cnf vorhanden und bzgl. des Pfades angepasst sein.
- Windows NT, Windows XP
To install MySql as a service: mysqld-max-nt –install mysqld-max-nt –remove Eigentlich sollte man MySQL mit mysqld bzw. mysqld-nt starten können, aber das geht nicht und das Error-Log mysql.err enthält keinerlei Aufschlüsse. Außerdem sollte es sich unter NT als Service starten lassen mit NET START MYSQL bzw. im Dienste-Dialog bzw. stoppen lassen mit NET STOP mysql. Aber dort erscheint der Fehler 1067. Der Grund der Fehlermeldung ist die fehlende Datei C:\MY.CNF, die existieren muss wenn man MySQL nicht im Standardverzeichnis C:\MYSQL installiert.
Trace einschalten
- Dienst stoppen
- in CMD-Shell in das MySQL-Bin Verzeichnis wechseln
- mysqld --debug=d,query,where:O,/tmp/mysqld.trace aufrufen
- Windows XP
Now install the server as a service: mysqld --install The service is installed with the name `MySql'. Once installed, it can be immediately started from the `Services' utility, or by using the command `NET START MySql'.
Versionen
Die Version erhält man in der Kopfzeile von PHP-Admin. MySQLDump wurde von der Version 5 in C:\Uwes\xampp\mysql\bin\v5.0\ installiert.
Konfiguration
Windows
Zur Übersicht über die Konfiguration dient das Tool WINMYSQLADMIN.EXE, das sich im BIN-Verzeichnis befindet.
Linux
Beim 1&1-Root Server liegen die Executables unter /usr/bin. Die Startup-Datei mysql liegt unter /etc/rc.d/ oder unter /etc/init.d/
JDBC Zugriff einrichten
Der MySQL-JDBC Treiber liegt z.Zt. unter c:\uwes\mm.mysql-2.0.8. Die Bibliothek wurde auch nach <TOMCAT_HOME>/common/lib kopiert.
Datenbanken
Datenbanken anzeigen
show databases;
Datenbanken verwenden
use <DBNAME>;
Datenbanken anlegen
create database <DBNAME>;
Tabellen einer Datenbank anzeigen
show tables;
Daten einer Tabelle exportieren
Optionally bewirkt, daß nur CHAR und VARCHAR Felder durch den Enclose-Char eingeklammert werden.
SELECT' (<Columns>|*) FROM
INTOOUTFILE<File>' Beispiel: Die Daten werden, wenn kein Pfad angegeben ist, in das Verzeichnis <MySQLInstallDir>\Data\<DBName>\ exportiert. Die Datei darf nicht existieren. Directories müssen mitDaten einer Tabelle importieren
Beispiel: load data infile 'menu.txt' into table menu fields terminated by ';' optionally enclosed by '\;
SQL-File einlesen
s.u. source … Kommentarzeilen werden mit dem #-Zeichen eingeleitet.
Backup einer Datenbank
s. Kapitel 6
Security
MySQL unterscheidet nicht zwischen einzelnen Benutzern sondern zwischen der Kombination aus Benutzer und Host. Diese Kombination ergibt eine eindeutige ID. Das Sicherheitssystem regelt hierbei genauestens welcher Benutzer von welchem Host welche Rechte auf welcher Datenbank besitzt. Die 'user' Tabelle beinhaltet alle Host/User Kombinationen, welche den MySQL-Server connecten dürfen. Alle Berechtigungen die ein Benutzer in dieser Tabelle enthält gelten für alle Datenbanken, sofern keine erweiterten Berechtigungen für den jeweiligen Benutzer in der Tabelle db definiert wurden. Man kann diese Berechtigungen auch als grundlegende Einstellungen ansehen und ein datenbankabhängiges Fein-Tunig in der Tabelle db festlegen. The GRANT/REVOKE commands are for restricting access to MySQL.
Eintragen eines neuen Users
use mysql; insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) values ('localhost', 'www504', password('UCEAp'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'); bzw. in der Kurzform: insert into user VALUES('localhost','www504',PASSWORD('UCEAp'),'Y', 'Y','Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'); oder über PHPAdmin und Password()-Funktion verwenden oder User anlegen und Berechtigungen zuweisen über: GRANT ALL ON catalog_contra.* TO contra_shop; Anscheinend muss man, damit dies wirksam wird, den Server runterfahren oder aber: flush privileges;
MySQL Shell
Beispiele: mysql –-password=ZZXNaEB6 mysql –-user=web6 –-password=J0mgiZUE mysql --user=web6 --password=J0mgiZUE --host=p15138371.pureserver.info
Commands
create database <DBName>; create table <TableName> (spalte1 integer, spalte2 char(20)); delete from <TableName>; describe <TableName>; help insert into <TableName> (<Spalte>{,<Spalte>}) values(<Values>); load data infile '<FileName>' into table <TableName>; quit select * from <TableName> ['into outfile '<FileName>' [fields [terminated by '<TermChar>''] [optionally] enclosed by <EncChar>]]; EncChar := <TermChar>
TermChar := <Char> | \t | \' | ...
show databases;
show tables;
show columns from <TableName>;
source <Filename with SQL statement and #-Comments>;
status
use <DBName>;
MySQLDump
Die Dateien können mit der MySQL-Shell über das source-Kommando (s.o.) importiert werden. Beispiele: mysqldump --user root --host=172.18.8.13 mysql504 >a.txt
mysqldump --add-drop-table --user root --host=172.18.8.13 mysql504 | mysql mysql504
mysqldump --user=web6 --password=J0mgiZUE --host=p15138371.pureserver.info usr_web6_1
mysqldump --add-drop-table mysql504 adressen | mysql --user=web6 --password=J0mgiZUE --host=p15138371.pureserver.info usr_web6_1
' mysqldump –-add-drop-table –-all-databases
mysqldump --user root --add-drop-table --databases mysql504 --compatible=mysql40 | mysql --host=192.168.1.2 --user root
Beispiel für Downgrade
'mysqldump --opt --allow-keywords --compatible=mysql40 –u<USER> –p<PASSWORD> -hlocalhost <DATABASE>'
MySQLAdmin
mysqladmin --password=ZZXNaEB6 (version | variables | reload)
''
;
select * from url into outfile 'url.txt' fields terminated by ';' optionally enclosed by '\ lines terminated by '\r\n';
/' getrennt werden.'