Introduktion MySQL och MariaDB Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Vad är MySQL? MySQL är en databashanterare. Den använder sig av frågespråket SQL. MySQL är fri programvara, licensierad under GNU General Public License. Programmet skrevs och underhölls före 2008 av det svenska företaget MySQL AB i Uppsala. De sålde support och servicekontrakt såväl som kommersiella licensierade kopior av MySQL. Programmets huvudsakliga utvecklare var finlandssvenske Michael Widenius och David Axmark. Grundarna arbetar numera med MariaDB. 2008 köptes MySQL AB av Sun Microsystems för en miljard dollar och den 27 januari 2010 köptes Sun upp av Oracle för 8,5 miljarder amerikanska dollar. Källa https://sv.wikipedia.org/wiki/mysql https://en.wikipedia.org/wiki/michael_widenius 2 1
Vad är MariaDB MariaDB är en fortsatt utvecklad gren av MySQLdatabasen. Programkoden går under GNU General Public License, i motsats till den numera Oracle-ägda MySQL, där uppdateringar skyddas i allt större utsträckning genom upphovsrätt. Bakgrunden är att Oracle inte verkar ha några planer för MySQL's framtida livscykel. Bakom MariaDB står de ursprungliga skaparna till MySQL, Michael Widenius, David Axmark och Allan Larsson. Källa: https://sv.wikipedia.org/wiki/mariadb 3 Webbserverprogrampaket Webbserverprogrampaket är ett paket av program som inkluderar några applikationer som används för att skapa och arbeta med databaser och serverbaserade webbsidor, t.ex. Apache, MySQL/MariaDB, PHP och phpmyadmin. Exempel på webbserverprogrampaket är: XAMPP WampServer www.apachefriends.org www.wampserver.com/en 4 Copyright 2015 Mahmud Al Hakim www.webacademy.se 2
XAMPP www.apachefriends.org Copyright 2015 Mahmud Al Hakim www.webacademy.se 5 WampServer www.wampserver.com/en Copyright 2015 Mahmud Al Hakim www.webacademy.se 6 3
Ladda ner och installera WampServer Copyright 2015 Mahmud Al Hakim www.webacademy.se 7 OBS! Tillåt åtkomst Copyright 2015 Mahmud Al Hakim www.webacademy.se 8 4
Starta WampServer Copyright 2015 Mahmud Al Hakim www.webacademy.se 9 Starta MySQL console Copyright 2015 Mahmud Al Hakim www.webacademy.se 10 5
MySQL console (monitor) Blankt lösenord Eller root Copyright 2015 Mahmud Al Hakim www.webacademy.se 11 Visa alla databaser med kommandot SHOW DATABASES Copyright 2015 Mahmud Al Hakim www.webacademy.se 12 6
Några vanliga kommandon SHOW DATABASES; CREATE DATABASE TestDatabas; USE TestDatabas; CREATE TABLE TestTabell(id INT); SHOW TABLES; INSERT INTO TestTabell VALUES(1), (2), (3); SELECT * FROM TestTabell; DROP DATABASE TestDatabas; Testa direkt i MySQL Console Copyright 2015 Mahmud Al Hakim www.webacademy.se 13 phpmyadmin phpmyadmin är ett gratis och öppenkällkodsverktyg skrivet i PHP för att administrera MySQL via en webbläsare. Starta phpmyadmin Copyright 2015 Mahmud Al Hakim www.webacademy.se 14 7
phpmyadmin gränssnitt Copyright 2015 Mahmud Al Hakim www.webacademy.se 15 Skapa en databas Öppna fliken Databaser Ange Databasnamn Välj Kollationering (Teckenkodning) Copyright 2015 Mahmud Al Hakim www.webacademy.se 16 8
Skapa en tabell Välj en Databas Ange namn och antal kolumner Copyright 2015 Mahmud Al Hakim www.webacademy.se 17 Skapa en tabell forts Ange kolumnnamn Välj Datatyp T.ex. VARCHAR och ange Längden Copyright 2015 Mahmud Al Hakim www.webacademy.se 18 9
Lägg till data Öppna fliken Lägg till Skriv data och Kör Copyright 2015 Mahmud Al Hakim www.webacademy.se 19 Exportera en tabell (eller en databas) Öppna fliken Exportera Välj format Copyright 2015 Mahmud Al Hakim www.webacademy.se 20 10
Kopiera en tabell Öppna fliken Operationer Ange ett namn och Kör Copyright 2015 Mahmud Al Hakim www.webacademy.se 21 Töm eller ta bort en tabell Öppna fliken Operationer Copyright 2015 Mahmud Al Hakim www.webacademy.se 22 11
Övning Skapa en databas åt en liten videobutik. Använd följande schema Kunder(Kundnummer, Namn, Gatuadress, Postnummer, Ort) Filmer(FilmID, Titel, Kategori, Huvudroll, Pris) Uthyrning(Film, Kund, Uthyrning, Aterlamning) Importera CSV-filer till databasen. Kör några SQL-frågor mot databasen. Copyright 2015 Mahmud Al Hakim www.webacademy.se 23 Steg 1 Skapa databasen Copyright 2015 Mahmud Al Hakim www.webacademy.se 24 12
Steg 2.1 Skapa tabellen Kunder Primärnyckel anges här Copyright 2015 Mahmud Al Hakim www.webacademy.se 25 Steg 2.2 Skapa tabellen Filmer Copyright 2015 Mahmud Al Hakim www.webacademy.se 26 13
Steg 2.3 Skapa tabellen Uthyrning Copyright 2015 Mahmud Al Hakim www.webacademy.se 27 Steg 3 Importera data via CSV Välj en tabell Öppna fliken Importera Välj en fil Se nästa bild Copyright 2015 Mahmud Al Hakim www.webacademy.se 28 14
Välj CSV using LOAD DATA (Detta är ett MySQL-kommando) Ändra till semikolon Lämna allt annat och Kör Copyright 2015 Mahmud Al Hakim www.webacademy.se 29 Kör SQL-frågor Copyright 2015 Mahmud Al Hakim www.webacademy.se 30 15
SQL mot databasen Videobutik Del 1 -- Enkla frågor mot enstaka tabeller SELECT * FROM Kunder SELECT * FROM Filmer SELECT * FROM Uthyrning -- Visa ej återlämnade filmer. SELECT * FROM Uthyrning WHERE Aterlamning IS NULL -- Vilka olika filmer med Mel Gibson i huvudrollen finns i databasen? SELECT * FROM Filmer WHERE Huvudroll = 'Mel Gibson' Copyright 2015 Mahmud Al Hakim www.webacademy.se 31 SQL mot databasen Videobutik Del 2 -- Visa antal filmer som inte lämnats tillbaka per kund (Visa kundnummer). SELECT Kund, Count(Film) AS 'Antal filmer' FROM Uthyrning WHERE Aterlamning IS NULL GROUP BY Kund -- Visa en lista på alla kunder (kundnummer) som har mer än 10 filmer. SELECT U.Kund, Count(U.film) FROM Uthyrning U WHERE U.Aterlamning IS NULL GROUP BY U.Kund HAVING Count(U.film) >= 10 Copyright 2015 Mahmud Al Hakim www.webacademy.se 32 16
SQL mot databasen Videobutik Del 3 -- Cross Join (Kartesisk produkt) SELECT * FROM kunder, Uthyrning; SELECT * FROM Filmer, Uthyrning; -- Join (Inner Join) (koppla flera tabeller) SELECT * FROM Kunder, Uthyrning WHERE kunder.kundnummer = Uthyrning.Kund -- Visa några fält från olika tabeller SELECT Kunder.Namn, Uthyrning.Film, Uthyrning.Uthyrning FROM Kunder, Uthyrning WHERE kunder.kundnummer = Uthyrning.Kund Copyright 2015 Mahmud Al Hakim www.webacademy.se 33 SQL mot databasen Videobutik Del 4 -- Använd Alias SELECT K.Namn, U.Film, U.Uthyrning FROM Kunder AS K, Uthyrning AS U WHERE K.Kundnummer = U.Kund -- Använd nyckelorden INNER JOIN ON istället för WHERE SELECT K.Namn, U.Film, U.Uthyrning FROM Kunder AS K INNER JOIN Uthyrning AS U ON K.Kundnummer = U.Kund -- INNER är inte obligatoriskt (Bara JOINT = INNER JOIN) SELECT K.Namn, U.Film, U.Uthyrning FROM Kunder AS K JOIN Uthyrning AS U ON K.Kundnummer = U.Kund Copyright 2015 Mahmud Al Hakim www.webacademy.se 34 17
SQL mot databasen Videobutik Del 5 -- Visa ej återlämnade filmer. Visa kundnamnet och filmid (FK). SELECT K.Namn, U.Film, U.Uthyrning FROM Kunder AS K, Uthyrning AS U WHERE K.Kundnummer = U.Kund AND U.Aterlamning IS NULL -- Visa ej återlämnade filmer. Visa Filmtitel och uthyrningsdatumet. -- (Vilka filmer finns ute) SELECT Filmer.Titel, Uthyrning.Uthyrning FROM Uthyrning, Filmer WHERE Aterlamning IS NULL AND Filmer.FilmID = Uthyrning.Film ORDER BY Uthyrning DESC Copyright 2015 Mahmud Al Hakim www.webacademy.se 35 SQL mot databasen Videobutik Del 6 -- Visa ej återlämnade filmer. -- Visa Kundnamn, Filmtitel och uthyrningsdatumet. SELECT K.Namn, F.Titel, U.Uthyrning FROM Filmer F, Kunder K, Uthyrning U WHERE K.Kundnummer = U.Kund AND F.FilmID = U.Film AND Aterlamning IS NULL -- Visa kundnamn och filmtitel som finns i tabellen uthyrning! SELECT K.Namn, F.Titel, U.Uthyrning, U.Aterlamning FROM Kunder AS K, Filmer AS F, Uthyrning AS U WHERE K.Kundnummer = U.Kund AND F.FilmID = U.Film ORDER BY F.Titel Copyright 2015 Mahmud Al Hakim www.webacademy.se 36 18
SQL mot databasen Videobutik Del 7 -- Hur många gånger har "Dödligt vapen 1" hyrts ut? SELECT Count(u.uthyrning) FROM Filmer AS F, Uthyrning U WHERE F.FilmID = U.Film AND F.Titel = 'Dödligt vapen 1' -- Visa antal filmer som inte lämnats tillbaka per kund -- (Visa Kundnamnet). SELECT K.Namn, Count(U.Film) AS 'Antal filmer' FROM Uthyrning U, Kunder K WHERE Aterlamning IS NULL AND K.Kundnummer = U.Kund GROUP BY K.Namn Copyright 2015 Mahmud Al Hakim www.webacademy.se 37 SQL mot databasen Videobutik Del 8 -- Visa en lista på alla kunder (Kundnamn) som har mer än 10 filmer. SELECT K.Namn, Count(U.film) FROM Uthyrning U, Kunder K WHERE U.Aterlamning IS NULL AND K.Kundnummer = U.Kund GROUP BY K.Namn HAVING Count(U.film) >= 10 -- Visa en lista på alla filmer som är ute -- Visa kundnamn och filmtitel SELECT K.Namn, F.Titel FROM Uthyrning U, Kunder K, Filmer F WHERE U.Aterlamning IS NULL AND K.Kundnummer = U.Kund AND F.FilmID = U.Film ORDER BY K.Namn Copyright 2015 Mahmud Al Hakim www.webacademy.se 38 19
SQL mot databasen Videobutik Del 9 -- Vilka dramor har Vera Lindberg hyrt? (Kategori=Drama) SELECT F.Titel, K.Namn, U.Uthyrning, F.Kategori FROM Kunder K, Filmer F, Uthyrning U WHERE K.Kundnummer = U.Kund AND F.FilmID = U.Film AND F.Kategori = 'Drama' AND K.Namn = 'Vera Lindberg' -- Använd JOIN istället för WHERE SELECT F.Titel, K.Namn, U.Uthyrning, F.Kategori FROM Uthyrning U JOIN Kunder K ON K.Kundnummer = U.Kund JOIN Filmer F ON F.FilmID = U.Film WHERE F.Kategori = 'Drama' AND K.Namn = 'Vera Lindberg' Copyright 2015 Mahmud Al Hakim www.webacademy.se 39 SQL mot databasen Videobutik Del 10 -- Vilka filmer som kostar 30 kronor att hyra har Natalie Karlsmark hyrt? SELECT F.Titel, F.Pris, K.Namn FROM Kunder K, Filmer F, Uthyrning U WHERE F.Pris = 30 AND K.Namn = 'Natalie Karlsmark' AND K.Kundnummer = U.Kund AND F.FilmID = U.Film -- Använd JOIN istället för WHERE SELECT F.Titel, F.Pris, K.Namn FROM Uthyrning U JOIN Kunder K ON K.Kundnummer = U.Kund JOIN Filmer F ON F.FilmID = U.Film WHERE F.Pris = 30 AND K.Namn = 'Natalie Karlsmark' Copyright 2015 Mahmud Al Hakim www.webacademy.se 40 20