17 december 2006
Een cursus PHP vraagt om een cursus MySQL. Immers, PHP-toepassingen die in het geheel geen gebruik maken van een database zijn er weinig. En áls er dan een database gebruikt wordt, is dit vaak MySQL. Nu zijn er genoeg artikelen geschreven over MySQL, maar vaak zijn deze zeer toepassingsgericht. Er blijven nog genoeg vragen over die behandeld dienen te worden, bijvoorbeeld in dit artikel:
Een database is een digitaal archief van tal van informatie. Een database zorgt ervoor dat u veel informatie (bijvoorbeeld productinformatie over uw hele assortiment) op één klein kunt beheren. Zo’n database kunt u dan ook gebruiken voor meerdere doeleinden. Zo zou een database voor een boekhandel aan de ene kant gebruikt kunnen worden om op internet het assortiment aan klanten te tonen, terwijl het via een intranet ook kan dienen om richting de inkoopafdeling de huidige voorraad te communiceren. Een effectieve database moet aan de volgende criteria voldoen:
Het moge duidelijk zijn dat databases niet meer weg te denken zijn uit de informatietechnologie van 2006 e.v. De snelheid van het zoeken van informatie en de grote hoeveelheden die opgeslagen kunnen worden hebben onze wereld beter doorvindbaar gemaakt.
Om te kunnen ‘communiceren’ met een database (om bijvoorbeeld informatie uit de database te halen) is een ‘taal’ nodig. Deze taal bestaat uit allerlei verschillende queries. Zo is er een query te maken om een item uit de database te verwijderen, een andere om iets in de database te plaatsen enz. Als ik zeg dat SQL staat voor structured query language, zal het duidelijk zijn dat SQL de ‘grammatica’ van de communicatietaal met de database vormt. Met een beetje basiskennis Engels is de taal goed te lezen:
UPDATE nieuws
SET titel = 'Titel van het nieuwsbericht'
WHERE id = 3
SQL is een eenvoudig te leren taal. Daarnaast is het ook nog eens platformonafhankelijk. Het zijn m.n. deze twee eigenschappen die SQL zo populair hebben gemaakt.
SQL is dus de ‘grammatica’ van databasecommunicatie. Er zijn veel databasesystemen ontwikkeld die SQL gebruiken. We noemen PostgreSQL en MySQL. MySQL is opensource software. Dit betekent dat het gratis te gebruiken is. Het is het meest gebruikte databasesysteem voor PHP. Veel PHP hosting ondersteunt dan ook MySQL en vaak is er zelfs al de software phpMyAdmin geïnstalleerd waarmee je makkelijk een MySQL database kan beheren.
MySQL geeft zelf een aantal redenen waarom we MySQL zouden moeten gebruiken. Nu zijn zij natuurlijk bevooroordeeld, maar omdat de argumenten lijken te kloppen, lopen we er toch maar een paar langs. Om eerlijk te zijn, zullen we ook moeten bekennnen dat postgreSQL-fan Vincent gelijk heeft met zijn lijst van MySQL fouten. De foutenlijst van postgreSQL is opvallend korter, maar ook Vincent is bevooroordeeld :) Maar voor nu een aantal positieve eigenschappen van MySQL.
MySQL heeft twee opslagmethoden: MyISAM en InnoDB. MyISAM is de default en als je niks aanpast zullen de door jou aangemaakte tabellen dus van dit type zijn. Het verschil tussen deze twee is wat technisch en zullen we hier verder niet bespreken. Het is alleen goed om te weten dat je met InnoDB meer geavanceerde toepassingen kan maken.
De syntax van MySQL is goed te lezen. Ook is het een goed gebruik om alle syntax in hoofdletters te schrijven, zodat goed te zien is wat de syntax is en wat de variabelen (tabelnamen, kolomnamen enz.) zijn. We zullen de basis syntax hieronder doorlopen en voor meer infomatie verwijzen we weer naar de manual: dat ding is niet voor niets zo volledig ;-)
Als je bijvoorbeeld alle nieuwsberichten die geplaatst zijn na een bepaalde datum wilt selecteren, zul je die eis als voorwaarde aan je selectie-query moeten meegeven. Hiervoor heb je de zgn. operators nodig. Hieronder volgt een tabel met de meest gebruikte operators.
| Operator | Betekenis |
| = | Gelijk aan |
| <> | Ongelijk aan |
| > | Groter dan |
| < | Kleiner dan |
| >= | Groter dan of gelijk aan |
| <= | Kleiner dan of gelijk aan |
Opmerking:
Deze lijst is niet volledig, maar vanwege de lengte van dit artikel hebben we ons moeten beperken. De operators die hierboven staan zijn echter door beginners wel de meeste gebruikte.
We zullen later in de concrete voorbeelden zien hoe deze in de praktijk werken.
Met het CREATE-statement kun je uiteraard een tabel aanmaken. Als je met PHP en MySQL werkt, zul je in de praktijk vaak phpMyAdmin gebruiken om tabellen te maken, maar het is ook handig om zelf tabellen te kunnen maken. Laten we eerst eens naar een voorbeeld kijken:
CREATE TABLE nieuws
(titel VARCHAR(20),
intro TEXT,
catID TINYINT(3));
Je ziet dat we een tabel creëren met de naam ‘nieuws’. Vervolgens worden er drie kolommen gemaakt met alle drie een ander datatype.
Opmerking:
De gevorderde gebruiker zal de indexes en keys missen, maar die laten we nu inderdaad bewust liggen omdat dit een basiscursus is.
Nu we een tabel gecreëerd hebben, zal hier data in ingevoerd moeten worden. Dit doen we met het INSERT INTO-statement. We geven een voorbeeld om een rij in te voeren in de net aangemaakte tabel.
INSERT INTO nieuws
(titel, intro, catID)
VALUES ('Titel eerste nieuwsbericht', 'Dit is de intro van het nieuwsbericht', '6')
Het statement SELECT wordt uiteraard gebruikt om (een deel van) de data uit één of meerdere tabellen te halen. In het FROM-deel van de statement geef je aan uit welke tabel(len) je data wilt halen. Het WHERE-deel kan voorwaarden bevatten, zodat je niet gelijk alle data uit een tabel trekt. Tenslotte kun je in het ORDER BY-stukje aangeven wat de volgorde van het resultaat moet zijn. Hierbij kun je de woorden ASC of DESC gebruiken om aan te geven of de sortering in oplopende (ASC, ascending) of dalende (DESC, descending) volgorde wilt sorteren. Een voorbeeld van een SELECT-statement is:
SELECT *
FROM nieuws
WHERE catID = '6'
AND publicatieDatum >= '08-12-2006'
ORDER BY titel ASC
In dit voorbeeld zie je dat je meerdere condities kunt combineren door toevoeging van het woord AND. Daarnaast kun je ook gebruik maken van OR maar daar gaan we in dit artikel even niet op in.
Opmerking:
De * in bovenstaande query staat voor ‘alles’. Als je slechts een enkele kolom wilt selecteren, kun je deze * vervangen door een lijst van deze kolomnamen gescheiden door komma’s. Het selecteren van alle kolommen is makkelijker (omdat je niet vooraf hoeft te bedenken welke kolommen je nodig hebt), maar betekent ook een klein snelheidsverlies.
Een reeds ingevoerde rij moet je natuurlijk ook kunnen wijzigen. Hiervoor gebruiken we het UPDATE-statement. In het SET-deel van het statement geven we de wijzigingen aan terwijl het WHERE-deel bepaald op welke rijen de wijzigingen uitgevoerd moeten worden. Laten we weer een voorbeeld geven:
UPDATE nieuws
SET titel = 'De nieuwe titel',
intro = 'De nieuwe intro'
WHERE id = '6'
Het DELETE-statement doet wat je vermoed dat hij doet: rijen uit een tabel knikkeren. Weer is er de mogelijkheid om voorwaarden in het WHERE-deel van de query te zetten. Een voorbeeld van een DELETE-statement is:
DELETE FROM nieuws
WHERE id = '22'
Als je geen conditie opgeeft worden alle rijen van de tabel verwijderd. Als je bijvoorbeeld je hele nieuws-database wilt legen kun je dit doen via deze query:
DELETE FROM nieuws
Dit artikel blinkt uit in haar onvolledigheid. Veel zaken zijn nog onbesproken bleven. Ik noem er een aantal om er wellicht in de toekomst een link naar een artikel achter te hangen.
BETWEEN en LIKE.JOINs.MAX(), SUM(), COUNT(), TIMESTAMP() en HAVING().Meer lezen over MySQL doe je uiteraard eerst op de site van het product zelf. Hier vind je artikelen en een forum. Daarnaast vind je op Planet MySQL diverse blogs en nieuwsitems over MySQL. Op MySQLForge vind je allerlei projecten rond dit databaseproduct.