Jani Ahde (1401497, TI14SPeli) MySQL ja PostgreSQL Seminaarityö Essee Opintojakso 206101312_TP Marraskuu 2015
SISÄLLYS 1 JOHDANTO... 3 2 RELAATIO JA SQL... 3 2.1 Relaatiotietokanta... 3 2.2 SQL... 4 3 MYSQL... 5 3.1 MySQL yleisesti... 5 3.2 MySQL toiminta... 6 4 POSTGRESQL... 6 4.1 PostgreSQL yleisesti... 6 4.2 PosgreSQL toiminta... 7 LÄHTEET... 9 LIITTEET
1 JOHDANTO On valtavia määriä dataa ja liian vähän aikaa sen fyysiseen käsittelyyn. Datan suhde toisiinsa on myös rajoittava tekijä tässä yhtälössä. Miten siis voimme helposti ja suhteellisen vaivatta käsitellä valtavia määriä toisiinsa suhteessa olevaa dataa? Toivomme, että data käsittelee itse itsensä ja tulee tarpeen vaatiessa esiin? Käymme läpi valtavan määrän erilaisia kansioita ja yritämme löytää sopivaa tietoa vastaavan mapin? Meidän ei tarvitse. Miten suurin osa maailman sovelluksista kuten esim. Google, Wikipedia, ja potilastietojärjestelmät löytävät tarvitsemansa datan? Nämä sovellukset, ja monet muutkin, käyttävät relaatiotietokantaohjelmistoja tai vastaavia ohjelmistoja tämän datan käsittelemiseen ja suodattamiseen tuhansien alkioiden joukosta. Tämä seminaari käsittelee relaatiotietokantaohjelmistoja MySQL ja PostgreSQL, ja esimerkkejä käsitellään SQL-koodin mukaisesti. Selvitämme minkälaisia relaatiotietokantaohjelmistoja MySQL ja PostgreSQL ovat, ja miten SQL ylipäätänsä niiden sisällä käyttäytyy. Tutustumme lyhyesti ensin SQL:llään ja relaatiotietokannan käsitteeseen, ennen kuin siirrymme itse relaatiotietokantaohjelmistoihin. Seminaarissa oleva tieto on löydetty pääasiallisesti internetissä olevista lähteistä ja relaatiotietokantojen omia dokumentaatioita hyväksikäyttäen. 2 RELAATIO JA SQL 2.1 Relaatiotietokanta Tietokanta on eräänlainen arkisto johon kaikki data on tallennettuna. Tietokanta on hyödyllinen erityisesti silloin kun on tarpeeksi suuri määrä dataa. Kuvitellaan vaikka viiden Excel-tiedoston sijaan yli viisisataa Excel-tiedostoa. Miten tietokanta sitten helpottaa tiedonhakuprosessia? Kun kaikki data on yhdessä sijainnissa, sitä on helppo muokata, ylläpitää ja käyttää tiedonlähteenä. Tietokanta ei välttämättä kuitenkaan ole pelkästään sähköinen arkisto. Tavallinen kalenterikin on tietokanta. Kuitenkin, suurimmat tietokannat perustuvat suhteelliseen eli relaatiomalliin. Relaatiomalli on tapa, johon SQL:llän toiminta perustuu. Kyseessä oleva tapa pyrkii kuvaamaan dataa ja sen suhdetta toisiin datan ilmentymiin. Kuitenkin,
relaatiomalli perustuu puhtaan matemaattisesti predikaattilogiikkaan, jolla tutkitaan tietynlaisia formaalikieliä. Predikaattilogiikasta esimerkkinä voidaan pitää vaikka toteamusta, että pii on positiivinen: Pπ. Relaatiomallia voidaan tietokantojen yhteydessä ilmentää eräänlaisella äiti-lapsi suhteella. Sen sijaan, että ajateltaisiin tavanomaisesti, että äidillä voi olla monta lasta, mutta lapsella ei voi olla montaa äitiä, niin kuvitellaan, että esim. viestillä voi olla vain yksi kirjoittaja, mutta viestin kirjoittajalla useita viestejä. Molemmat, sekä viestien kirjoittaja että viestit ovat omia taulujaan, jotka ovat osa relaatiotietokannan käsitettä. Relaatiomallissa on myös huomioitava, mitä datalle käy, jos esim. vaikka kirjoittaja poistetaan. Moista tapahtumaa hallitaan viite-eheyksillä, joilla määritetään mm. mitä yhdistetyille tiedoille tapahtuu jos taulujen tiedot vaihtuvat tai niitä poistetaan. Tässä tapauksessa esim. viestejä ei tarvitse poistaa jos niiden kirjoittaja poistetaan. Tämä voi olla käyttäjälle harmillista keskustelupalstoilla, mutta itsehän olemme vastuussa kirjoituksistamme. 2.2 SQL SQL (Structured Query Language) on IBM:n standardoima ohjelmointikieli tai tässä tapauksessa kyselykieli, joka tarkoitettu erityisesti käsittelemään relaatiotietokantoja. SQL:llä käsittää sekä datan määrittelyyn, että datan hallinnoimiseen kuuluvan syntaksin. SQL on sekä ANSI että ISO standardi. SQL:llän keskeisiin periaatteisiin kuuluvat relaatiotietokannan mukaisesti taulut, rivit, ja pystypalkit. Jokaisella taululla on omat pystypalkkinsa, joihin data on tallennettuna ko. pystypalkin datatyypin ja nimen mukaisesti. Jokainen rivi taasen sisältää dataa liittyen kunkin kohdalla olevan pystypalkin datatyypin ja nimen mukaisesti. Osa rivien alkioista voi olla NULL-arvoisia, eli niissä ei ole välttämättömästi dataa. Tämä on kuitenkin määritelty ko. taulun luonnin yhteydessä. Taulujen riveiltä haetaan dataa SQL:llän määrittelemien kysely-syntaksin avulla. Kysymys voi suomennettuna olla mm. keillä kaikilla henkilöillä yhteystiedoissani on numeroilla 310 alkava puhelinnumero. Relaatiomallin mukaisesti on tärkeätä, että jokaisella taululla on pystypalkki, joka määrittä ns. pääavaimen. Pääavaimen avulla data voidaan uniikisti yksilöidä, ja jos esim. kaksi eri taulua käyttää samaa avainta, ne voidaan yhdistää
yhdeksi kokonaisuudeksi. Pääavaimien rinnalla toimivat myös ns. vierasavaimet, jotka pääasiassa auttavat linkittämään taulut yhteen, kunhan vierasavain vastaa arvoltaan toisen taulun pääavaimen arvoa. Yleisimpiä avaimia ovat ns. id:t. SQL:llän kaikkein tärkeimpiä käyttökäskyt ovat SELECT, INSERT, UPDATE ja DELETE. Määrittelykäskyistä tärkeimpiä ovat CREATE TABLE, CREATE DA- TABASE ja ALTER-käsky. Huomioimisen arvoista on, että SQL ei ole ns. case sensitive. SQL:llän syntaksia ei kiinnosta käytätkö isoja vai pieniä kirjaimia, mutta yleisten kirjoitusperiaatteiden mukaisesti, käyttö- ja määrittelykäskyt kirjoitetaan kokonaan isolla, jotta ne erottuvat yksilöivistä pystyriveistä. Käskyjä tullaan käsittelemään myöhemmin esimerkeissä MySQL:llän käytöstä enemmän puhuttaessa. 3 MYSQL 3.1 MySQL yleisesti MySQL on relaatiotietokantaohjelmisto, jolla voidaan luoda, ylläpitää ja muuttaa ja hallinnoida tietokantoja. MySQL on yksi käytetyimmistä tietokantaohjelmistoista, ja on osa erästä suosittua serverin ylläpitoratkaisua, LAMP:ia, joka tarkoittaa Linux, Apache, MySQL ja PHP:n yhdistämistä serverin ylläpitotyökaluiksi. MySQL:llän etu on sen mukautuvaisuus tarpeiden mukaan. Kaupallisesti käytettävänä se on yksi käytetyimmistä, ja on lisäksi saatavilla yksityisille kuluttajillekin vapaan GNU GPL lisenssin kautta. Ero on tässä tapauksessa lähinnä ohjelmistojen omisteisuus. MySQL-tietokannan loi suomalainen Michael Monty Widenius vuonna 1995. Hänen kanssaan yhteistyössä toimi ruotsalainen David Axmark. Huvittava pieni fakta on, että MySQL:llän nimestä osio My on tullut Montyn tyttären mukaan. Sun Microsystems, nykyisin Oracle, osti MySQL:llän vuonna 2008 700 miljoonalla eurolla.
3.2 MySQL toiminta MySQL:llää käytetään hyvin usein LAMP-alustan kanssa. LAMP-alusta on joukko avoimen lähdekoodin ohjelmia, jotka muodostavat yhdessä WWW-palvelimen, jonka avulla voidaan suorittaa dynaamisia websivuja. LAMP-alusta sisältää ohjelmat: Linux, joka on avoimen lähdekoodin käyttöjärjestelmä Apache, joka on webpalvelin MySQL/MariaDB, jotka ovat tietokantarajapintoja/ohjelmistoja PHP, Perl ja/tai Python, jotka ovat komentosarjakieliä MySQL:llän käyttö ei kuitenkaan rajoitu näihin ohjelmointikieliin, vaan tuki löytyy myös mm. C++:lle. MySQL:llää voidaan käyttää joko arviolta käytetyimmän MySQL Workbenchin, joka on graafinen käyttöliittymä MySQL:lle, läpi tai sitten komentolinjan läpi, eli DDL (Data Definition Language) kautta. Workbenchin kautta tietokannan käyttö voi olla helpompaa, mutta DDL:llän käyttö on tehokasta ja toimivaa, sillä sen avulla voidaan mm. automatisoida tietokannan tarkistusta. Voimme esimerkiksi laskea satunnaisen käyttäjän viestien määrän seuraavalla komennolla kuvitteellisessa tietokannassa: SELECT COUNT(k.id) as ViestiLKM FROM käyttäjä.viestit k; Tässä esimerkissä suoritetaan kysely käyttäjät tietokannan viestit tauluun aliaksella k, tarkoituksena laskea viestien määrä pystypalkin id rivien määrien kautta. 4 POSTGRESQL 4.1 PostgreSQL yleisesti PostgreSQL on avoimena lähdekoodina jaettava olio-relaatiotietokantapalvelin, joka on lisensoitu joustavalla BSD-tyyppisellä lisenssillä. PostgreSQL on yksi vaihtoehto MySQL:llän tilalle. Se ei ole varsinaisesti minkään yrityksen tai
henkilön kontrolloima, vaan perustuu kansainvälisen yhteisön tekemään yhteistyöhön. Tämä tarkoittaa käytännössä sitä, että tässä yhteisössä on tietty ydinryhmä, joka viime kädessä päättää siitä, mitkä muutokset otetaan mukaan koodipuuhun. PostgreSQL kattaa suuremman osan SQL-2003-standardista kuin MySQL ja tukee MySQL:llän tapaan tyypillisiä ACID-ominaisuuksia. ACID-ominaisuuksia ovat: Atomic: Transaktio joko tapahtuu tai ei Consistent: Transaktio jättää tietokannan yhteensopivuustilaan Isolated: Transaktio tapahtuu eristyneesti Durable: Transaktio tallentuu myös virtakatkoksen varalta PostgreSQL:llän kehitys alkoi jo Ingresin kaupallisesta versiosta vuonna 1982. Nimi Postgres tuli varsinaisesti siis Ingresin jälkiprojektina, jonka tarkoituksena oli vastata tuon aikaisten tietokantojen ongelmiin. Vuonna 1996 tapahtui nimenmuutos PostgreSQL:lläksi SQL-tulkin korvatessa vanhemman Ingres-pohjaisen QUEL-systeemin. 4.2 PosgreSQL toiminta PostgreSQL toimii mm. Microsoft Windowsilla, useimmilla Unix-pohjaisilla ja Unixin kaltaisilla käyttöjärjestelmillä. PostgreSQL:llässä toimivia funktioita voidaan kirjoittaa mm. sisään rakennetulla PL/pgSQL:llä, Perlillä, Pythonilla, C:llä ja C++:lla. Varsinainen toiminta on kuitenkin SQL-kielellä. ACID-periaatetta vahvistaakseen PostgreSQL käyttää Multi-Version Concurrency Controlliksi (MVCC) nimettyä järjestelmää, joka antaa jokaiselle käyttäjälle käyttöönsä tilannevedoksen tietokannasta. Käytännössä tämä mahdollistaa muutosten tekemisen siten, että ne eivät näy muille ennen kuin tapahtuma on valmis ja hyväksytty. PostgreSQL käyttää sisäänrakennettuja B- ja R-puun indeksien lisäksi käyttäjän määrittelemiä indeksejä. Indeksit ovat tietorakenteita, jotka kopioivat tietokannan taulujen sisältämän datan muotoon, josta tiettyjen hakujen on nopeampaa löytää tarvittava tieto. Nämä indeksit tukevat lukuisia ominaisuuksia, joita ovat mm. lausekeindeksit, jotka indeksoivat lausekkeen tai funktion tuloksia pelkän sarakearvon asemasta, sekä osittaisindeksit, jotka indeksoivat ainoastaan osan taulusta. Lisäksi käytöstä löytyvät bittikarttaindeksihaut, joiden
avulla luodaan bittikartta näiden indeksien ja edot täyttävien monikkojen leikkauskohdista.
LÄHTEET http://www.iltasanomat.fi/kotimaa/art-1288337055321.html?id=1668839 http://www.mysql.com/about/ http://www.postgresql.org/about/ https://jyx.jyu.fi/dspace/bitstream/handle/123456789/37697/urn:nbn:fi:jyu- 201204161538.pdf?sequence=1 http://www.w3schools.com/sql/default.asp