MySQL - Søg og manipuler

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.

Introduktion

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

Søgning i databasen

Kald hele tabellen

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;
	

Kald en post

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';
	

Kald bestemte felter

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;
	

Kald med wildcard

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%';
	

Kald fra flere tabeller

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"
;
	

Manipulation med data

Indsæt ny post

	
INSERT INTO mentorer
(Mentor, Navn, Lokale, Mobil, Mail) 
VALUES ('dd', 'Dennis Dinesen', '20', '23344520', 'dd@fakemail.dk')
;	

Ændr felt værdi

	
UPDATE mentorer SET Navn = 'Dennis Dahl' 
WHERE mentorer.Mentor = 'dd'
	

Ændr kolonnenavn

	
RENAME table mentorer to lærere;
	

Tilføj kolonner

	
ALTER TABLE lærere
ADD fag1 VARCHAR(10) NOT NULL AFTER Mail,
ADD fag2 VARCHAR(10) NOT NULL AFTER fag1;
	

Før

Efter

Ændr feltnavn

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);
	

Ændre felt datatype

Her ændrer vi feltettypen Navn fra varchar(50) til varchar(60).

	
ALTER TABLE lærere 
MODIFY Navn varchar(60) NOT NULL;
	

Ændr database navn

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

Oprette ...

Opret database

	
CREATE DATABASE nyDB;
	

Slet database (drop)

	
DROP DATABASE nyDB;
	

Opret tabel

	
CREATE TABLE nyDB.nyTabel
(
felt1 VARCHAR(3) NOT NULL ,
felt2 VARCHAR(50) NOT NULL ,
felt3 TINYINT(2) NOT NULL ,
felt4 INT(8) NOT NULL 
);
	

Slet tabel (drop)

	
DROP TABLE nyDB.nyTabel;
	

Nøgler og indeks

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ær nøgle

Primærnøglen er en post, som som har unik felter, og som samtidig fungerer som MySQL's kontakt til tabellen

Opret primærnøgle

	
ALTER TABLE ** TABEL **
ADD PRIMARY KEY (** POST **);
	

Fjern primærnøgle

	
ALTER TABLE ** tabel **
DROP PRIMARY KEY;
	

Indeks

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.

Vis indeks

	
SHOW INDEX FROM klasser_og_mentorer;
	

Opret indeks

	
ALTER TABLE ** TABEL **
ADD INDEX (** POST **);
	

Fjern indeks

	
ALTER TABLE ** TABEL **
DROP INDEX ** POST **;
	

Unikke indeks-nøgler

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)

Information

Informationer om tabel

	
DESCRIBE klasse_og_elever;
	

Informationer om række

	
DESCRIBE klasse_og_elever 'Startår';
	

Terminalen

For at starte MySQL op fra kommandolinien skal vi først ind i xampp's mappe og finde den mappe MySQL er installeret i.

Login Windows

Å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

Login Mac

Å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

Vis databaser

	
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)

Vælg database

	
USE mentor;
	
MariaDB [(none)]> USE mentor; ← Input
Database changed ← Output
MariaDB [mentor]>

Vis tabeller

	
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)

Vis struktur

	
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)

Vis indhold

	
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)

Forlad MYSQL

	
exit
	
MariaDB [mentor]> exit ← Input
Bye ← Output

c:\xampp\mysql\bin>