IT-Academy Logo
Sign Up Login Help
Home - Betriebssysteme - Linux - Server/Internet/Netzwerk - Einführung in MYSQL



Einführung in MYSQL

Überblick über mysql-server und clients mit einer kurzen, allgemeinen, SQL-Einführung.


Autor: Franz Schaefer (mond)
Datum: 08-03-2002, 12:02:29
Referenzen: man mysql
/usr/share/doc/mysql-gpl-doc/manual_toc.html
/usr/share/doc/mysql-gpl-doc/manual.html
http://www.mysql.com/documentation/
Schwierigkeit: Anfänger
Ansichten: 15965x
Rating: 2 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Übersicht

datenbanken sind ein oft benoetigites werkzeug. in einfachen faellen
reicht es daten in einem textfile zu speichern. wie wir in der perl
einfuehrung gesehen haben ist es sehr leicht diese textfiles zu
verarbeiten. probleme entstehen aber dann wenn mehrere user unter
umstaenden gleichzeitig daten lesen und schreiben wollen... oder wenn
daten von verschiedenen computern aus im zugriff sein sollen...

zur loesung dieser probleme setzte man ueblicherweise datenbank server
ein. ein einzelner server der die schreib und lese operationen
koordiniert und der die abfrage der daten mittels einer abstrakten
abfragesprache erlaubt..

es gibt auf linux verschiedenste datenbankserver. komerzielle und freie.
die beliebtesten freien sind mysql und postgres. fuer 99% aller
anwendungen sind diese sicherlich ausreichend und man muss kein teures
komerzielles datenbanksystem kaufen.

mysql zeichnet sich dadurch aus dass es

* die weltweit groesste verbreitung hat.

* sehr schnell bei einfachen queries (abfragen) ist.

* unkompliziert in der administration.

nachteile von mysql gegenueber anderen systemen:

* nicht alle SQL features implementiert. (wobei duch die hohe
verbreitung diese features schon in arbeit sind)


mysql ist heute standardbestandteil aller distributionen. mysqld ist dabei
der datenbankserver. mysqladmin ein commandline administrationstool und
"mysql" ein commandline client programm.

hat man noch kein passwort fuer den mysql root user gesetzt sollte man das
als erstes tun. (der mysql root hat nichts mit dem unix root zu tun ausser
das der mysql root eben zugriff auf alle mysql datenbanken hat).

mysql -uroot -p mysql

loggt mit hifle des mysql commandline clients auf den lokalen mysql server
ein und zwar als user "root" und fraegt das passwort ab. es wird auf die
datenbank mit dem namen "mysql" verbunden in die tabllen gespeichert sind
die mysql intern benoetigt.

mit folgenden zeilen setzt man ein neues passwort fuer den root user (am
mysql prompt):

update user set Password=password('geheim') where user='root' ;

(bitte natuerlich nicht 'geheim' als passwort verwenden). es gibt auch
noch einen user mit leerem passwort. will man hier ebenfalls das passwort
aendern so schreibt man:

update user set Password=password('geheim') where user='' ;

der mysql client arbeit mit dem readline interface. man kann also wie auf
der bash gewohnt editieren. befehle zurueckhohlen. reverse-incremntal
search.. der gewohnte komfort.

damit die geaenderten passworter aktiv werden verwendet man das mysqladmin
programm:

mysqladmin reload -uroot -p

(wobei hier noch das alte passwort gilt. danach sind die neuen passwoerter
aktiv)

als naechstes legen wir uns eine kleine datenbank an:

mysqladmin create drinks -uroot -p

wir verbinden uns mit der neu erzeugten datenbank:

mysql -uroot -p drinks

daten werden im sql als sogenannte tabllen gespeichert. am anfang gibt es
noch keine tabellen in unser neu erzeugten datenbank drinks. wir legen mal

create table cocktails (name char(30) not null default '', preis float default 0) ;

(man beachte der mysql client will am ende jedes sql statements einen ;
laesst man den weg kann man ein statement ueber mehrere zeilen ausdehnen)

obiges create legt eine tabelle mit dem namen "cocktails" innerhalb
unserer drinks datenbank an. sie enthaelt 2 felder:

eines mit dem namen "name" der aus 30 zeichen (characters) bestehen kann
und eines das "preis" heisst und eine fliesskommazahl (float) ist.

beim feld "name" legen wir noch feld dass es nie den wert >null haben
kann. null ist ein spezieller wert eines datenbankfeldes der so etwas wie
undefiniert besagt. der wert ist also nicht die zahl 0 oder ein
leerstrings sondern eben undefiniert. als default wert fuer das namens
feld legen wir den leerstring fest ''. als default wert fuer "preis" haben
wir den zahlenwert 0.

show tables ;

zeigt uns jetzt dass wir schon eine tabelle angelegt haben.

desc cocktails ;

gibt und eine beschreibung (description) unserere cocktails tabelle.

jetzt wollen wir mal werte einfuegen:

insert into cocktails values('white russian',6.50);
insert into cocktails values('mojito',7.00);

die werte muessen dabei mit den feldern in der datenbank korespondieren.
das ist insofern unpraktisch als das insert nicht mehr funktionieren
wuerde wenn man jetzt ein neues feld hinzufuegt. besser ist es die felder
in die man werte einfuegt anzugeben:

insert into cocktails (name,preis) values('tequila sunrise',70.00);

hier kann man die felder in die man werte einfuegt beliebig angeben. (wir
koennte z.b. nur name angeben. dann wuerde preis auf den default wert von
0 gesetzt.

um die daten anzusehen koennen machen wir:

select * from cocktails;

70 euro ist natuerlich zu teuer fuer einen tequila sunrise. zum aendern
von feldern verwendet den sql befehl UPDATE:

update cocktails set preis=6.20 where name='tequila sunrise';

wenn wir generell alle preise um 10 prozent anheben wollen koennten wir
z.b schreiben:

update cocktails set preis=preis*1.1 ;

bei grossen datenbanken mit vielen datensaetzten sollte man auf die felder
nach denen man oft sucht einen index setzen. in manchen feldern will man
auch einheideutige namen haben weil man diese als eindeutigen schluessel
zu den daten verwenden will. in unsere cocktail datenbank koennten wir
z.b. den namen als eindeutigen schluessel definieren. zum aendern der
strucktur einen bestehenden tabelle verwenden wir "alter table"

alter table cocktails add unique(name);

(mit add index(name) wuerden wir nur einen index hinzufuegen der die
abfragen beschleunigt aber trozdem erlaubt dass der name doppelt
vorkommt.)

ein unique key der einen datensatz eindeutig definiert wird auch "primary
key" genannt.

select * from cocktails order by preis;

gibt die list der cocktails nach preis geordnet aus.

select preis,name from cocktails where preis < 7 ;

gibt alle cocktails aus deren preis kleiner als 7 euro ist. dabei werden
die felder preis und name in der angegebenen reihenfolge zurueckgeliefert.

wie wir komplexere abfragen machen die mehrere tabellen verknuepfen lernen
wir demnaechst.

was wir heute noch behandeln: wir wollen natuerlich nicht immer als root
auf unsere tabelle zugreifen. wir wollen neue mysql user anlegen die z.b.
nur abfragen duerfen oder die nur rechte auf eine einzige datenbank haben.

wir verbinden uns dazu wieder mit der datenbank namens "mysql"

mysql -uroot -p mysql

und legen einen user maxmeier an der nur select aus unsere drinks
datenbank ausfuehren duerfen soll:

insert into user (Host,User,Password) values('localhost',
'maxmeier',password('geheim'));

(natuerlich suchen wir uns ein besseres passwort als "geheim"). der host
localhost bedeutet hier dass der user nur local zugreifen darf und nicht
von einem anderen computer aus.)


insert into db (Host,Db,User,Select_priv) values('%','drinks','maxmeier','Y');

damit die zugriffsrechte wieder aktuell werden muessen wir wie oben
gezeigt wieder "mysqladmin reload" aufrufen.
der user darf jetzt auf die datenkban drinks selects ausfuehren sonst
noch nichts. weitere privilegien koennten wir ihm erteilen in dem wir
entsprechende spalten in der tablle auf 'Y' setzten. (z.b. mit einem
update)

anstatt die mysql zugriffstabellen direkt zu modifizieren kann man in
neueren mysql versionen privilegien auch mittels eines "GRANT"
statemens vergeben. z.b. so:

grant select,update on drinks.* to maxmeier@localhost identified by 'geheim' ;

das wuerde "select" und "update" rechte auf alle tabellen (*) der
datenbank "drinks" vergeben fuer einen user "maxmeier" der nur von
localhost connecten darf und der mit dem passwort "geheim" angelegt wird.

EXERCISES:

* setzte dir das mysql passwort fuer den root user

* show dir die struktur der datenbank "mysql" an.

* lege dir eine datenbank an

* lege dir dort eine tabelle mit feldern an.

* erzeuge datensaetzte mit insert und schau dir die datensaetze mit select
an.

* aendere die datensaetze mit verschiedenen update statemens

* selektiere datensaetze mit der WHERE clausel und ornde sie mit der ORDER
BY

* lege dir einen user an der alle rechte auf die neu angelegte datenbank
hat aber auf sonst keine datenbank. ueberpruefe ob dem wirklich so ist.

* lege dir einen user an der nur select rechte auf diese datenbank hat.
ueberpruefe ob dem wirklich so ist in dem du versuchst mit dem user ein
"update" abzusetzen.

_______________________________________________
CD ist ein service von SILVER SERVER
der inhalt unterliegt der GFDL
_______________________________________________



[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0