MySQL

Uit FOK!wiki
Ga naar: navigatie, zoeken

MySQL is een opensource relationeel database management systeem (DBMS), die gebruik maakt van SQL. Het MySQL softwarepakket bestaat onder meer uit een serverprogramma, doorgaans mysqld genoemd, waarbij de d voor daemon staat, wat de Unix of Linux term is 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 database management systeem die 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 gratis encyclopedie. Een bekende MySQL frontend is PHPMyAdmin, een webbased MySQL administratie programma geschreven in PHP.

Waar de naam MySQL vandaan komt is onduidelijk, maar men vermoedt dat het komt omdat het dochtertje van mede oprichter, Monty Widenius, My heet.

Geschiedenis[bewerken]

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.

Gebruik[bewerken]

MySQL wordt veel gebruikt in combinatie met Linux, Apache en PHP of Perl. Deze combinatie van software wordt LAMP genoemd. MySQL kan echter ook worden gebruikt op andere besturingssystemen.

MySQL wordt gebruikt om data op te slaan. Dit kan tekst zijn maar ook afbeeldingen.

MySQL is ook de meest gangbare database voor opensource fora, Content Management Systemen (CMS)of blog-software zoals XOOPS of Mambo.

Keuze InnoDB of MyISAM[bewerken]

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(relationships!) gedefinieerd. Deze relaties (en de referenti?le integriteitsacties) worden bepaald in de middleware(in PHP, of ...).

Voorbeeld met MyISAM: Gebruikers kiezen een uur uit "Uur" 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 en referenti?le integriteitsacties kunnen hier dus wel met SQL DDL gedefinieerd worden. De prijs die je betaalt is snelheidsverlies.

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:

Bestand:MySQLQueryBrowser.gif

Naast de keuze van de referenti�le integriteit, kan de functie van je table bepalend zijn voor je tabletype. Veelal wordt InnoDB gebruikt indien het een table betreft, waar veel naar geschreven wordt, maar ook veel data opgehaald en geupdated. Kortom een table die aan verandering onderhevig is. MyIsam wordt benut, als het een table betreft, waar bijvoorbeeld alleen vanuit geselecteerd wordt. Het onderscheid tussen beiden wordt gemaakt doordat MyIsam table level locking heeft en InnoDB rowlevel locking.

Links[bewerken]