URL: internet.physto.se
SQL-koden i exemplena i detta kapitel är den som stöds av "MySQL v. 5.1".
SQL är inte ett programmeringsspråk. Det är ett kodspråk vi använder för att ge instruktioner till databasservrar om uppdrag vi vill få utförda, t.ex att skapa eller radera en tabell, infoga eller redigera poster eller göra utsökningar av delmängder av data som uppfyller vissa krav. Exakt hur databasservern gör för att åstadkomma detta bryr vi oss inte om. T.ex behöver vi inte välja precis vilken sökalgoritm som ska användas vid sökning eller hur data rent fysiskt ligger lagrade och görs tillgängliga på serverdatorn - alla dessa beslut tas av databasservern.
En SQL-sats beskriver alltså bara i ganska allmänna ordalag, ofta mer eller mindre i klartext på engelska, vad som ska göras. Här är ett kodexempel, en instruktiuon till databasservern att söka ut (eller välja ut, eng. select) för- och efternamn om en kund med kundnummer 1234. Kundinformationen ligger lagrad i en databastabell med namn kunder, och informationen om varje kund är specificerad i (åtminstone) tre fält fnamn, enamn och kundnr.
Men man får inte låta sig luras av det till synes informella skrivsättet: i själva verket måste SQL-satser, precis som för alla kodspråk, formuleras enligt strikta regler som styr syntaxen för satserna och begränsar formen på tabellnamn och andra parametrar databasutvecklaren själv får välja.
Just satsen SELECT i exemplet ovan ska få databasservern att söka ut den delmängd av de data som finns lagrade i databasen som uppfyller vissa villkor. Satsen beskriver vad vi vill få utsökt, men exakt hur sökningen ska göras behöver vi som skickas SQL-kod till servern inte bry oss om. Det finns en lång rad olika algoritmer för hur man gör effektiva och snabba sökningar, och det är upp till konstruktörerna av databasserverprogramvaran att välja den algoritm som passar bäst. Vi SQL-kodare behöver däremot inte ha en doktorsexamen i numeriska metoder, det räcker att vi kan formulera lämpliga SQL-satser.
På detta sätt skiljer sig SQL från programmeringsspråk som Pascal, c/c++ och Java, och från webbskriptspråk som PHP och ASP. I dessa språk måste man koda exakt hur en viss uppgift ska genomföras, t.ex varje enskilt steg i en sökalgoritm.
En vanlig term för programmeringsspråkens explicita sätt att beskriva en process är att säga att de är procedurella språk (eng. procedural language). Databasspråket SQL, som bara ger order om att något ska ske, inte hur det ska göras, är ett av flera deklarativa språk (eng. declarative language).
Sökning i befintliga data är bara en av de saker man kan få gjort med SQL. Först måste man förstås kunna skapa de strukturer (databaser, tabeller) som ska lagra data, sen ska man fylla på databasen med data och ha möjligheter att göra ändringar. Slutligen finns en del administrativa sysslor som databasansvarige måste göra då och då, t.ex skapa databasanvändare, reparera skadade tabeller och göra backuper.
För alla dessa göromål finns speciella SQL-satser. Man brukar traditionellt dela upp dem i ett antal kategorier (databasadministration, datadefinition, datamanipulering och databasunderhåll). Jag följer denna klassificering i mina genomgångar av SQL i kommande kapitel.
Det har under årtionden utvecklats en rad olika tekniker för hur databaser ska byggas upp och manipuleras. Den i dag utan jämförelse vanligaste typen av databassystem är de s.k. relationsdatabaserna. Det program MySQL som används i Fysikums kurs är av denna typ. Den fullständiga termen är relationsdatabashanterare, på engelska Relational Database Management Systems, förkortat RDBMS.
Databasspråket SQL utvecklades specifikt för att passa just relationsdatabasernas sätt att arbeta och lagra data. Om ditt databasprogram förstår SQL är det alltså högst sannolikt en relationsdatabas, och vice versa.
De flesta relationsdabassystem är uppbyggda enligt den i datorsammanhang vanliga modellen klient/server. Systemet består alltså inte av bara ett enda program, utan man använder olika programkomponenter för olika ändamål.
Det centrala programmet är databasservern som ansvarar för själva datalagringen, alla beräkningar och manipuleringar av data. Databasservrar körs vanligtvis på särskilda serverdatorer, på samma sätt som för webbservrar och andra serverprogram.
Vi som använder databasen kör däremot en databasklient. I klienten ger vi instruktioner om vad vi vill får utfört, t.ex en databassökning. Beroende på hur klienten är designad kan vi antingen skriva SQL-satser i klartext, eller så använder vi någonslags grafiskt gränssnitt och låter klientprogrammet översätta våra inmatningar till SQL-satser. Klientprogrammet kör vi typiskt på vår egen arbetsdator. En del databasklienter (t.ex phpMyAdmin som omnämns i Fysikums kurs) är webbapplikationer som körs i en webbläsare.
Databasklienterna kopplar sig sedan upp mot databasservern via ett nätverk (t.ex Internet) och skickar över SQL-satserna till servern för bearbetning. Servern skickar efter fullgjort värv tillbaka det önskade resultatet till klienten, där det presenteras för oss.
Om vi fokuserar på språket SQL i denna process ser vi att databasservern är en SQL-tolk, d.v.s ett program som läser och utför instruktioner skrivna i språket SQL. Databasklienten är bara till för att formulera och vidarebefordra SQL-koden, inte för att tolka den.
Språket SQL skapades omkring 1975 som ett led i forskningen kring relationsdatabastekniken av företaget IBM, som länge varit stora på databasprogramvara. Det första kommersiella databassystemet som byggde på SQL lanserades av Oracle 1979. I dag är det det utan jämförselse mest populära språket för arbete med databaser.
Språket SQL har utvecklats en hel del sen sin tillkomst för ett kvartssekel sedan. Precis som för de flesta kodspråk man kommer i kontakt med i programvaru- och webbsammanhang bör man för SQL noga skilja på två utvecklingsgrenar, dels den formella SQL-standarden och dels de reellt existerande dialekterna av SQL i olika databasprogramvaror.
Standardiseringen ombesörjs sedan mitten av 1980-talet av standardiseringsorganisationerna ISO (i Europa) och ANSI (i USA). Tidigare versioner av standarden har varit ANSI/ISO SQL:1992 (även kallat SQL-92) och ANSI/ISO SQL:1999 (även kallat SQL-99). Aktuell version (hösten 2006) är ANSI/ISO SQL:2003.
När ett programvaruföretag, som t.ex MySQL AB, tar fram en databasprodukt brukar de ofta vara inbilska nog att inte följa gällande SQL-standard till punkt och pricka. De kanske väljer att utelämna en del av standardens funktionalitet, och vill kanske introducera egenkonstuerade SQL-satser som inte ingår i standarden. Ju större avvikelserna från standarden är, desto svårare blir det för en databasutvecklare att skriva SQL-kod som utan större problem kan flyttas mellan olika databasprogramvaror.
MySQL version 4.0 bygger på den något äldre standarden SQL-92 medan MySQL version 4.1 och version 5.0 ligger mycket nära standarden SQL:2003. Det finns dock en lång rad egna utvidgningar, funktioner som MySQL har som inte finns i standarden (jag försökt markera dessa utvidgningar tydligt i mina genomgångar). Utvidgningarna kan man ju försöka undvika om man vill ha kod som smidigt ska kunna flyttas till andra databasmiljöer. Värre är det med de inskränkningar jämfört med standarden som finns i MySQL:s dialekt av SQL. En del av dessa tillkortakommanden har varit föremål för stark kritik från användare av MySQL, och har länge utgjort ett hinder för MySQL att bli populärt i stora företag med höga krav på databasprogramvara. Särskilt kritiserat var att version 4.0 saknade s.k. transaktioner. MySQL-tillverkarna har försökt rätta en del av dessa brister i version MySQL 4.1, och med MySQL 5.0 anstränger man sig för att komma mycket långt i att få MySQL i samklang med den officiella standarden SQL:2003.
© 1995-2010 Hans Mühlen
Kontaktadress: hvzm physto.se
Kurserna ges av Fysikum vid Stockholms universitet.
Senast uppdaterad 22 maj 2007
[översikt]