|
13. MySQL.
13.1 SQL.
Om gegevens te bewerken, verwijderen en op te vragen uit MySQL maak je gebruik van
SQL, oftwel Structured Query Language. Dit is een taal die in veel
database(servers) voor handen is. De SQL die gebruikt wordt zal verschillen per
databaseserver.
13.2 Gegevens selecteren en opvragen in MySQL.
Om gegevens op te vragen in MySQL maak je gebruik van het SELECT statement. In
combinatie met een paar eventuele voorwaardes kan je precies de gegevens opvragen
die je nodig hebt. We gaan nu even uit van een database met twee tabellen. Samen
vormen ze een database waarin links en omschrijvingen van programma's staan. De
database naam is internet en de tabelnamen zijn link_soort en links:
<mysql>
$mysql -u guest -p internet
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 19 to server version: 3.23.1-alpha
Type 'help' for help.
mysql>
</mysql>
We kunnen nu eerst een gaan bekijken welke velden er staan in de tabellen staan:
<mysql>
mysql> show fields from links;
+------------+--------------+------+-----+---------+----------------+----------------------+
| Field | Type | Null | Key | Default | Extra | Privileges |
+------------+--------------+------+-----+---------+----------------+----------------------+
| id | int(11) | | PRI | NULL | auto_increment | select,insert,update |
| url | varchar(255) | | MUL | | | select,insert,update |
| url_naam | varchar(255) | YES | | NULL | | select,insert,update |
| license | varchar(60) | YES | | NULL | | select,insert,update |
| discript | tinyblob | YES | | NULL | | select,insert,update |
| link_soort | int(11) | | | 0 | | select,insert,update |
+------------+--------------+------+-----+---------+----------------+----------------------+
mysql> show fields from link_soort;
+-------+-------------+------+-----+---------+----------------+----------------------+
| Field | Type | Null | Key | Default | Extra | Privileges |
+-------+-------------+------+-----+---------+----------------+----------------------+
| id | int(11) | | PRI | NULL | auto_increment | select,insert,update |
| naam | varchar(50) | YES | | NULL | | select,insert,update |
+-------+-------------+------+-----+---------+----------------+----------------------+
</mysql>
Op die manier krijg je een overzicht van de velden, rechten en veldtypes
die er in de database staan. Om nu alle velden uit de link_soort tabel te selecteren
gebruik je de volgende code:
<mysql>
mysql> select * from link_soort;
+----+---------------------------+
| id | naam |
+----+---------------------------+
| 33 | security_sites |
| 31 | w-managers |
| 32 | wm-tools |
.................
</mysql>
Je ziet dat er een hele rij gegevens te voorschijn komen die bestaan uit een id en een naam.
Als je nu alleen willen weten hoeveel records er in die tabel staan dan kan je dat opvragen
met COUNT:
<mysql>
mysql> select count(id) from link_soort;
+-----------+
| count(id) |
+-----------+
| 51 |
+-----------+
</mysql>
Als je nu gegevens wilt toevoegen aan deze tabel dan kan je dat met het INSERT commando
doen. Bij het opvragen van de tabel gegevens heb je kunnen zien dat het veld id een veld
is dat de eigenschap auto_increment heeft. Je hoeft in dat geval dus geen eigenlijke
waarde mee te geven voor dat veld als je een nieuw record wilt invoeren. Je gebruikt in
dat geval de null waarde. MySQL zal zelf bekijken welk nummer er zal worden gebruikt voor
het id:
<mysql>
mysql> insert into link_soort values (null, 'test');
Query OK, 1 row affected (0.13 sec)
</mysql>
Om het record te verwijderen kan je DELETE gebruiken. In dit voorbeeld zou het niet kunnen
aangezien de gebruiker geen rechten heeft om records te verwijderen maar de syntax die iemand
met voldoende rechten moet gebruiken is de volgende:
<mysql>
mysql> DELETE FROM link_soort WHERE naam = 'test';
Query OK, 1 row affected (0.02 sec)
</mysql>
13.3 De site bezoeker toegang geven tot een database.
Om site bezoekers gegevens uit een database te kunnen laten opvragen moet je
bepaalde rechten toekennen. Dit is het snelste te realiseren in de mysql
monitor. We gebruiken hiervoor het GRANT statement:
<mysql>
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 3.23.1-alpha
Type 'help' for help.
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
</mysql>
Je kan ook gelijk vanaf de prompt de database selecteren die je wilt gebruiken, je doet
dit vanaf de prompt door mysql aan te roepen met als argument de database die je wilt gebruiken:
<mysql>
$mysql mysql
</mysql>
Je kan de gebruiker verschillende rechten toekennen. De meest voorkomende rechten zijn
SELECT, INSERT en UPDATE. Dit doe je op de volgende manier:
<mysql>
GRANT SELECT, INSERT ON gb.gb TO guest@localhost IDENTIFIED BY 'hallo';
</mysql>
We hebben de gebruiker guest nu rechten gegeven om records toe te voegen en te selecteren
in de gb database waarbij hij alleen rechten heeft in de tabel gb. Dit alles kan alleen
op de machine waarop MySQL staat. Het wachtwoord voor die gebruiker is hallo.
Mocht je de gebruiker nu ook UPDATE rechten willen geven en hij moet alles vanaf een
andere machine kunnen doen dan gebruik je het volgende:
<mysql>
GRANT SELECT, INSERT, UPDATE ON gb.gb TO guest@domeinnaam IDENTIFIED BY 'hallo';
</mysql>
Mocht de database gb uit diverse tabellen bestaan waarop de gebruiker allemaal moet kunnen
lezen, schrijven en aanpassen dan gebruik je de volgende syntax:
<mysql>
GRANT SELECT, INSERT, UPDATE ON gb.* TO guest@domeinnaam IDENTIFIED BY 'hallo';
</mysql>
13.4 Databases exporteren met behulp van mysqldump
Met behulp van mysqldump kan je databases exporteren naar een formaat dat op een andere server
kan worden ingelezen. Men kan aan het programma allemaal opties mee geven die zorgen voor o.a.
compressie, table locking, etc... Hieronder een simpel voorbeeld:
<mysql>
$mysqldump databasenaam > /tmp/databasenaam.sql
</mysql>
Dit maakt een bestand aan waarin de tabellen en data in query vorm zijn weggeschreven. Je kan ze
inlezen door gebruik te maken van mysql:
<mysql>
$mysql -u gebruikersnaam -p databasenaam < /tmp/databasenaam.sql
</mysql>
De -u optie staat voor de gebruiker, de -p optie geeft aan dat men een wachtwoord moet gebruiken.
|