MySQL
MySQL | |
---|---|
|
|
Ontwikkelaar | MySQL AB |
Meest recente versie | 5.0.27 / 21 oktober 2006 |
Laatse bèta versie | {{{laatste_beta_versie}}} / {{{laatste_beta_releasedatum}}} |
Besturingssysteem | Linux, Microsoft Windows, Solaris, FreeBSD, OS/X, HP-UX, AIX, QNX, Netware, SCO |
Categorie | Database |
Licentie | GPL of commerciële licentie |
Website | http://www.mysql.com |
MySQL is een opensource relationele database management systeem (RDBMS), die gebruik maakt van SQL. MySQL werd vroeger vaak gebruikt voor toepassingen zoals fora en gastenboeken, meestal in combinatie met PHP, tegenwoordig is het de basis van een breed scala aan internettoepassingen, maar ook stand-alone softwareprogramma's. Het MySQL-softwarepakket bestaat onder meer uit een serverprogramma, doorgaans mysqld genoemd. Hierbij staat de d voor daemon, de Unix- of Linux-term voor een proces dat netwerkconnecties aanneemt. Verder bestaat het uit een verzameling clientprogramma's, zoals mysql en mysqldump waarmee automatisch of interactief met de server gecommuniceerd kan worden. MySQL is een populair databasemanagementsysteem dat voor het gestructureerd opslaan van gegevens voor zeer veel toepassingen wordt gebruikt. Voorbeelden van websites die gebruikmaken van MySQL zijn de sites van Wikipedia, de vrije encyclopedie. Een bekend MySQL-frontend is phpMyAdmin, een webgebaseerd MySQL-administratieprogramma geschreven in PHP.
Waar de naam MySQL vandaan komt is onduidelijk, maar men vermoedt dat het vernoemd is naar het dochtertje van medeoprichter Monty Widenius, dat My heet.
Inhoud |
[bewerk] Geschiedenis
De eerste interne versie van MySQL verscheen in 1995. MySQL begon als een manier om een snelle verbinding te maken met de tabellen van mSQL. Na wat testen bleek echter dat mSQL niet snel en flexibel genoeg was. Er kwam een nieuwe API die leek op die van mSQL en later werd gebruikt om mSQL-applicaties makkelijker te porten naar MySQL. Door de vele jaren is MySQL uitgegroeid tot een van de populairste SQL-databases, mede dankzij de open source-beweging.
De laatste stabiele versie 5.0.27 verscheen op 21 oktober 2006.
[bewerk] Gebruik
MySQL wordt veel gebruikt in combinatie met Linux, Apache en PHP of Perl. Deze combinatie van software wordt LAMP genoemd. MySQL wordt in deze combinatie echter ook gebruikt op andere besturingssystemen, bijvoorbeeld met Mac OS X (MAMP) of Microsoft Windows (WAMP).
MySQL wordt gebruikt om data op te slaan. Dit kan tekst zijn, maar ook afbeeldingen.
MySQL is ook een gangbare database voor opensource-fora en Content Management Systemen (CMS)of blog-software zoals XOOPS of Mambo.
[bewerk] Keuze InnoDB of MyISAM
Een belangrijke keuze die je moet maken bij de implementatie van gegevensbanken met MySQL is het opslagsysteem. Standaard is MyISAM de opslagmotor, vooral gekenmerkt door snelheid. Het spreekt vanzelf dat het ontwerp op een genormaliseerde manier moet gebeuren maar bij de implementie (met SQL-DDL) worden geen relaties tussen tabellen gedefinieerd met MyISAM. Deze relaties (en de referentiële integriteitsacties) worden bepaald in de middleware (in PHP, of ...).
[bewerk] Voorbeeld met MyISAM
Gebruikers kiezen een uur uit "Uren" dat wordt opgeslagen in "Contact". Niet echt genormaliseerd want "bezet" is een procesgegeven dat je ook uit "contact" kunt halen. Maar het voorbeeld illustreert wel het ontbreken van de definitie van een relatie. Het is de middleware die de relatie verzorgt.
CREATE TABLE `Contact` ( `user_id` mediumint(8) unsigned NOT NULL default '0', `Naam` varchar(120) NOT NULL default '', `Uur` time NOT NULL default '00:00:00', PRIMARY KEY (`user_id`), UNIQUE KEY `ContactID` (`user_id`) ) TYPE=MyISAM; CREATE TABLE `Uren` ( `UurID` smallint(6) NOT NULL auto_increment, `Uur` time NOT NULL default '00:00:00', `Bezet` enum('vrij','bezet') NOT NULL default 'vrij', PRIMARY KEY (`UurID`), UNIQUE KEY `UurID` (`UurID`) ) TYPE=MyISAM;
Een andere opslagmotor, InnoDB, voldoet wat transacties betreft aan de ACID-standaard en laat bovendien toe voorwaarden toe te kennen aan vreemde sleutels. Relaties tussen tabellen en referentiële integriteitsacties kunnen hier dus wel met SQL-DDL gedefinieerd worden. De prijs die je betaalt is snelheidsverlies, maar alleen tijdens manipulaties. (Deze relaties tussen tabellen zijn niet te verwarren met de relatie die gedefinieerd wordt door het relationeel model. De relaties in het relationeel model komen overeen met de tabellen!)
[bewerk] Voorbeeld met InnoDB
Stel dat een auteur meerdere boeken kan schrijven, maar dat een boek slechts door één auteur wordt geschreven:
CREATE TABLE `auteur` ( `AuteurID` int(10) unsigned NOT NULL auto_increment, `Naam` varchar(45) NOT NULL default '', `Voornaam` varchar(45) default NULL, PRIMARY KEY (`AuteurID`) ) ENGINE=InnoDB; CREATE TABLE `werk` ( `WerkID` int(10) unsigned NOT NULL auto_increment, `Titel` varchar(45) NOT NULL default '', `AuteurID` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`WerkID`), KEY `FK_Werk_1` (`AuteurID`), CONSTRAINT `ddd` FOREIGN KEY (`AuteurID`) REFERENCES `auteur` (`AuteurID`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB;
Let hierbij op de randvoorwaarde CONSTRAINT en de bijhorende acties ON DELETE en ON UPDATE Uiteraard kan je met een GUI-tool zoals MySQL Query Browser de implementatie verzorgen a.h.v. de table-editor.