Det er vigtigt at du anvender Chrome eller Firefox til disse opgaver, da PHPMyAdmin følger webstandarderne. Hvis du anvender Safari, Internet Explorer eller Edge, risikerer du at få fejl.
Når databasen er oprettet kan man søge i databasen ved hjælp af et SQL (Structured Query Language). I første omgang kan det virke uoverskueligt, men når man først forstår strukturen kan man lave meget præcise søgninger i sin(e) database(r). Se eksemplet herunder:
SELECT * FROM klasse_og_elever WHERE Klasse='1a' OR Klasse='1b';
Koden betyder | |
---|---|
SELECT * | Vælg alt |
FROM klasse_og_elever | ... i tabellen klasse_og_elever |
WHERE Klasse='1a' OR Klasse='1b' | Hvor feltet klasse er 1a eller 1b |
; | Forspørgsel slut |
Alle forespørgsler skal afsluttes med et semikolon (;) Det virker umiddelbart som unødvendigt, men det er praktisk senere når forespørgslerne bliver lange. Der vil man kunne lave linjeskift mellem de enkelte dele af forespørgslen og først når ; kommer vil det blive udført.!
SELECT *
FROM Klasse_og_elever
WHERE Klasse='1a' OR Klasse='1b'
;
Læs mere: http://www.w3schools.com/sql/default.asp
For at kalde fra hele tabellen skal vi først fortælle at vi vil kigge på alt indholdet og hvilken tabel det drejer sig om.
SELECT * FROM mentorer;
For at se en hel post, skal vi igen vælge alt indholdet, og tabellen vi vil undersøge. Herefter fortæller vi hvilken data vi vil finde. Husk at angive tekststrenge med anførselstegn ("*tekststreng*") eller citationstegn ('*tekststreng*').
SELECT * FROM mentorer WHERE Navn='Thomas Jensen';
Hvis vi kun vil have fra enkelte felter i hver post, fortæller vi hvilke felter vi vil se, og hvilken tabel det kommer fra.
SELECT Mentor,Mail FROM mentorer;
Nogle gange har man behov for at finde data, der har nogle fælles tegn. Det løser vi ved at anvende "wildcards". Normal vil man i computerverdenen angive et wildcard med *, men i programmeringsverdenen har man oprindeligt anvendt %.
Vi vælger igen alle data, i tabellen og søger denne gang med LIKE i stedet for =.
SELECT * FROM mentorer WHERE Navn LIKE 'Thomas%';
For at kalde fra flere tabeller skal vi i FROM angive de tabeller vi vil søge i. Herefter skal vi angive i hvilke felter det vi søger står i. Det gøres ved at bygge stien op til feltet. Herunder vil vi anvende feltet Mentor fra begge tabeller. For at ramme det rigtige felt skriver vi først hvilken tabel det handler om, efterfulgt af et punktum og feltets navn. Klasser_og_mentorer.Mentor fortæller altså at det er feltet Mentor i tabellen Klasser_og_mentorer.
SELECT * FROM klasser_og_mentorer, mentorer
WHERE klasser_og_mentorer.mentor='tj' AND mentorer.mentor='tj';
Den søgning kan vi gøre mere præcis ved at udvælge de felter der skal udskrives fra tabellerne. Vi erstatter SELECT *, med den konkrete felter med den fulde adresse.
SELECT klasser_og_mentorer.Klasse, mentorer.Navn, mentorer.Mobil, mentorer.Mail
FROM klasser_og_mentorer, mentorer
WHERE klasser_og_mentorer.mentor='tj' AND mentorer.mentor="tj"
;
INSERT INTO mentorer
(Mentor, Navn, Lokale, Mobil, Mail)
VALUES ('dd', 'Dennis Dinesen', '20', '23344520', 'dd@fakemail.dk')
;
UPDATE mentorer SET Navn = 'Dennis Dahl'
WHERE mentorer.Mentor = 'dd'
RENAME table mentorer to lærere;
ALTER TABLE lærere
ADD fag1 VARCHAR(10) NOT NULL AFTER Mail,
ADD fag2 VARCHAR(10) NOT NULL AFTER fag1;
Før
Efter
Da vi nu skal have alle lærere ind i listen skal vi have omdøbt feltnavnet Mentorer til Lærere.
ALTER TABLE lærere
CHANGE Mentor Lærer varchar(3);
Her ændrer vi feltettypen Navn fra varchar(50) til varchar(60).
ALTER TABLE lærere
MODIFY Navn varchar(60) NOT NULL;
Man kan ikke umiddelbart ændre navnet på en database. For at gøre det skal man reelt oprette en ny database, med det nye navn og derefter kopiere tabellerne fra den oprindelige database ind i den.
Backup af den ændrede database: mentor_db_v2.sql
CREATE DATABASE nyDB;
DROP DATABASE nyDB;
CREATE TABLE nyDB.nyTabel
(
felt1 VARCHAR(3) NOT NULL ,
felt2 VARCHAR(50) NOT NULL ,
felt3 TINYINT(2) NOT NULL ,
felt4 INT(8) NOT NULL
);
DROP TABLE nyDB.nyTabel;
I dette afsnit vises hvordan man arbejdet med nøgler og indeks generelt.
Vær opmærksom på at tabel- og postnavnet er erstattet af ** TABEL ** og ** POST **.
Primærnøglen er en post, som som har unik felter, og som samtidig fungerer som MySQL's kontakt til tabellen
ALTER TABLE ** TABEL **
ADD PRIMARY KEY (** POST **);
ALTER TABLE ** tabel **
DROP PRIMARY KEY;
For at MySQL skal kunne anvende de forskellige poster i en tabel, skal den kunne skabe kontakt. Det gøres ved at indeksere de poster som skal være tilgængelige.
SHOW INDEX FROM klasser_og_mentorer;
ALTER TABLE ** TABEL **
ADD INDEX (** POST **);
ALTER TABLE ** TABEL **
DROP INDEX ** POST **;
Man kan oprette unikke index, hvis man vil sikre sig at alle felter i en post er unikke. F.eks. hvis man har et kundeID som primærnøgle, men også vil sikre sig at CPR-nummeret er unikt
ALTER TABLE ** TABEL **
ADD UNIQUE (** POST **);
Unikke nøgle fjernes som et almindeligt indeks (se ovenfor)
DESCRIBE klasse_og_elever;
DESCRIBE klasse_og_elever 'Startår';
For at starte MySQL op fra kommandolinien skal vi først ind i xampp's mappe og finde den mappe MySQL er installeret i.
Åbn terminalen ved at søge på cmd og vælge Kommandoprompt
Naviger til mappen med kommandoen c:\xampp\mysql\bin:
cd c:\xampp\mysql\bin
Kør kommandoen ...
mysql -h localhost -u root -p
Åbn terminalen ved at søge på Terminal i Launchpad
Naviger til mappen med kommandoen /Applications/XAMPP/xamppfiles/bin
cd /Applications/XAMPP/xamppfiles/bin
Kør kommandoen
./mysql -h localhost -u root -p
Har du ikke angivet noget password trykker du blot Enter, når du bliver bedt om et password.
Herunder ser du terminaloutput fra Windows
c:\xampp\mysql\bin>mysql -h localhost -u root -p ← Windows' kommandolinie Enter password: ← Output fra MySQL Welcome to the MariaDB monitor. Commands end with ; or \g. ← Output fra MySQL Your MariaDB connection id is 2 Server version: 10.1.21-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> ← MySQL's kommandolinie
SHOW DATABASES;
MariaDB [(none)]> SHOW DATABASES; ← Input +--------------------+ ← Output | Database | +--------------------+ | information_schema | | mentor | | mentor_ny | | mysql | | performance_schema | | phpmyadmin | | test | +--------------------+ 7 rows in set (0.00 sec)
USE mentor;
MariaDB [(none)]> USE mentor; ← Input Database changed ← Output MariaDB [mentor]>
SHOW tables;
MariaDB [mentor]> SHOW tables; ← Input +---------------------+ ← Output | Tables_in_mentor | +---------------------+ | klasse_og_elever | | klasser_og_mentorer | | lærere | +---------------------+ 3 rows in set (0.00 sec)
DESCRIBE klasse_og_elever;
MariaDB [mentor]> DESCRIBE klasse_og_elever; ← Input +--------------+------------+------+-----+---------+-------+ ← Output | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | Klasse | varchar(3) | NO | PRI | NULL | | | Antal Elever | tinyint(2) | NO | | NULL | | | Piger | tinyint(2) | NO | | NULL | | | Drenge | tinyint(2) | NO | | NULL | | | Startår | year(4) | NO | | NULL | | +--------------+------------+------+-----+---------+-------+ 5 rows in set (0.01 sec)
SELECT * from klasse_og_elever;
MariaDB [importer_db]> SELECT * from klasse_og_elever; +--------+--------------+-------+--------+---------+ | Klasse | Antal Elever | Piger | Drenge | Startår | +--------+--------------+-------+--------+---------+ | 1a | 17 | 9 | 8 | 2016 | | 1b | 16 | 8 | 8 | 2016 | | 1x | 28 | 13 | 15 | 2016 | | 2a | 22 | 10 | 12 | 2015 | | 2b | 24 | 13 | 11 | 2015 | | 2x | 31 | 17 | 14 | 2015 | | 3a | 21 | 8 | 13 | 2015 | | 3b | 22 | 9 | 13 | 2015 | +--------+--------------+-------+--------+---------+ 8 rows in set (0.00 sec)
exit
MariaDB [mentor]> exit ← Input Bye ← Output c:\xampp\mysql\bin>