MyISAM sucks!

Voor me examen databanken overmorgen moet ik de hele SQL taal kennen. Ieder keyword moet in me geheugen gegrift staan. No problemos voor mij omdat ik al jaren iets van SQL ken en ik snel syntax kan aanleren. Ik wou eens testen of die foreign keys en die integriteitsregels wel werkte. Waarschijnlijk wel maar ik wou het met me eigen ogen zien.

Ik ga aan de slag en typ de volgende SQL code: http://pastebin.com/f1bb49f95.

Nu blijkt bij een foute insert dat de CHECK bij gebruikers niet gedaan wordt. Bij topics kan ik een foute id zetten bij de gebruiker. Als ik de gebruiker verander, verandert dat niet in zijn topics. Als ik een gebruiker verwijder, geeft hij geen foutmelding.

Ik begon te denken dat MySQL niets kon! Een product dat zo populair is, kan niets van de standaard SQL. Dat vond ik wat vreemd. Ontani kwam met de oplossing dat ik een verkeerde engine gebruik. MySQL heeft verschillende engines en de standaard is MyISAM. Die kijkt blijkbaar naar weinig regels. De engine die het wel doet is InnoDB. Dus vanaf nu weg met die MyISAM en hoera voor InnoDB!

3 Responses to MyISAM sucks!

  1. Knops Ignace zegt:

    MyISAM suckt niet beide zijn gemaakt met een specifiek doel. MyISAM gebruik je voornamelijk waar je data-integriteit regels van minder belang zijn (of waar jouw applicatie zelf instaat voor de data-integriteit) en waar snelheid en schijf gebruik belangrijker zijn. MyISAM heeft ook andere voordelen zo weet MyISAM bijvoorbeeld het totaal aantal rijen en is een commando zoals:

    SELECT count(*) aantal_rijen FROM mijn_tabel

    Zeer snel op MyISAM dan waar InnoDB dit steeds opnieuw zal moeten berekenen.

    PS: CHECK() word genegeerd door alle storage engines

  2. Knops Ignace zegt:

    Ik ben ook eens door je code gegaan en ik zag:

    geplaatstOp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP

    camelCase en TitelCase kan je best weglaten in een database aangezien verschillende DBMS deze op een andere manier afhandelen bijv. Oracle geeft dit terug als geplaatstop waardoor als je werkt met een data-access (PDO) or database abstraction layer (Doctrine) jouw code fouten genereerd omdat het de index geplaatstOp niet kan vinden.

  3. stijn1989 zegt:

    Tof :-) Dus best kolommen schrijven als `geplaatst_op`.

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s

%d bloggers op de volgende wijze: