Databasestøttet Webpublicering: Kort vejledning i MySQL
tilrettet af Martin Elsman (oprindeligt af Peter Sestoft)
MySQL er et relationsdatabasesystem (RDBMS). I et
relationsdatabasesystem består hver database af en samling tabeller.
Oplysninger udtrækkes fra tabellerne ved hjælp af såkaldte
forespørgsler, som er skrevet i sproget SQL.
Kom i gang med MySQL
Hvis du følger kurset Databasestøttet
Webpublicering er der blevet oprettet en database specielt til
dig, og sysadm har sendt dig en e-mail med dit databasebrugernavn og
databasepassword (løsen). I din database kan du oprette (næsten) lige
så mange tabeller med lige så mange data som det passer dig.
Du kan komme i kontakt med din database på denne måde:
- Log ind på en af ITUs servere (f.eks.
ssh.itu.dk)
ved hjælp af Secure
Shell (ssh).
- Forbind dig til databasen ved at skrive
mysql -h mysql.itu.dk -u <bruger> -p <database>
hvor <bruger> er brugernavn og
<database> er databasenavn.
Hvis dit brugernavn er jamesb og dit databasenavn er W2_E2003_jamesb ser det
sådan her ud:
mysql -h mysql.itu.dk -u jamesb -p W2_E2003_jamesb
- Du bliver bedt om password (løsen). Du skal bruge det
databasepassword som er sendt til dig fra sysadm, ikke dit
mail-password.
- Prøv at oprette en tabel Familie med felterne navn og fødseldag:
CREATE TABLE Familie (navn varchar(40), fødseldag int);
- Indsæt nogle poster i tabellen:
INSERT INTO Familie VALUES ('Carsten', 19640627);
INSERT INTO Familie VALUES ('Kirsten', 19360114);
INSERT INTO Familie VALUES ('Jørgen', 19340930);
Brug pil-op på tastaturet til at genfinde en tidligere SQL-kommando.
Du kan rette i kommandoen og så trykke retur for at udføre den.
- Udtræk posterne fra tabellen:
SELECT * FROM Familie;
- Udtræk posterne sorteret på forskellige måder:
SELECT * FROM Familie ORDER BY navn;
SELECT * FROM Familie ORDER BY fødselsdag;
- Afslut MySQL:
EXIT
Du kan altid gå ud af mysql uden at tabe data. Næste gang du
går ind husker den endda de sidste kommandoer du har udført. Brug
pil-op til at genfinde dem.
Kort Mysql-håndbog
Vis alle tabeller i aktuel database
SHOW TABLES
Vis oplysninger om felterne i Tabel
SHOW FIELDS FROM Tabel
Opret tabellen Tabel
CREATE TABLE Tabel (felt1 type1, ...);
Oversigt over de vigtigste SQL-typer:
| Type | Anvendelse | Eksempel
|
|---|
| int | heltal | 117
|
| double | flydende-kommatal | 3.1415
|
| decimal(20,2) | fast-kommatal med 20 cifre, 2
decimaler | 464000000000.00
|
| char(80) | tekst (maks 80 tegn) | 'Ole Jensen'
|
| varchar(80) | tekst (maks 80 tegn) | 'Ole Jensen'
|
| date | dato | 2002-03-10
|
| time | klokkeslet | 22:59:17
|
| datetime | dato og klokkeslet | 2002-03-10 22:59:17
|
Opret indeks på Tabel
CREATE INDEX Tabel_idx on Tabel (felt1, ...);
Et indeks gør søgning på felterne felt1, ... langt hurtigere.
I MySQL kan man kun have indekser på felter der er erklæret NOT
NULL da tabellen blev oprettet.
Nedlæg tabellen Tabel
DROP TABLE Tabel;
Udfør SQL-script fra en tekstfil, f.eks. studieadm.sql.txt
Inde i mysql kan du udføre
source studieadm.sql.txt;
Tilføj kopi af alle SQL-ordrer og resultater til filen
ud.txt
tee ud.txt
Hvis du ønsker at åbne filen ud.txt med Wordpad skal du huske at
vælge Filtype | Tekstdokumenter (*.txt), i Åbn dialogen,
ellers viser Wordpad ikke *.txt filer.
Indlæs data fra tabulator-separeret fil
Hvis tekstfilen tabel.txt indeholder data adskilt med
tabulator, og tabellen Tabel er oprettet, kan tekstfilens
linier indlæses som poster i tabellen:
LOAD DATA LOCAL INFILE "tabel.txt" INTO TABLE Tabel IGNORE 1 LINES;
Tekstfilen tabel.txt kunne for eksempel være eksporteret fra
et Excel-regneark med Filer | Gem som | Tekst (tabulatorsepareret)
| tabel.txt. Læg mærke til at IGNORE xx LINES kan
bruges til at ignorere tabeloverskrifter fra regnearket som ellers
fejlagtigt ville komme med i tabellen.
Slet alle poster fra tabellen Tabel
Dette sletter alle poster fra tabellen, d.v.s. dens indhold, men ikke
tabellen selv:
DELETE FROM Tabel;
Tillad bladring i resultatet af en forespørgsel
pager less
Denne ordre skal udføres én gang, efter starten af mysql.
Når du får et langt resultat fra en SELECT kan du bladre frem
og tilbage med tasterne d (down) og u (up). Afslut med q (quit).
Sætte en grænse på antallet af poster i et svar
Man kan tilføje LIMIT nn efter en SELECT for at
angive det maksimale antal poster man vil have, for eksempel:
SELECT * FROM Tabel LIMIT 30;
Hente MySQL-data ind i MS Excel og MS Access
I Excel kan man importere (kopiere) data fra en MySQL-database med
Data | Hent eksterne data | Ny databaseforespørgsel. I MS
Access kan man importere (kopiere) data fra en MySQL-database med
Filer | Hent eksterne data | Importer. Man kan tilgå (læse
og opdatere) tabeller i en MySQL-database med Filer | Hent
eksterne data | Sammenkæd tabeller.
Men det kræver at man på sin lokale Windows-PC har (1) MS Query, og
(2) en MyODBC-driver. Her er en MyODBC-driver til Win 95/98/ME.
Download og udpak (unzip) ODBC-driveren, kør Setup.exe og konfigurer
servernavn (sql.dina.kvl.dk), databasenavn, brugernavn og
password; det er de samme som når du bruger mysql fra DSRs
server.
Særlige forhold og begrænsninger i MySQL
- MySQL tillader ikke flettede forespørgsler (SQL-hæftet afsnit
3.2.2), dvs det er ikke muligt at have SELECT inden i
SELECT. Brug i stedet hjælpetabeller; se nedenfor. Men
MySQL tillader flettet insert (SQL-hæftet afsnit 3.2.3).
- Man kan kun have indekser på felter der er NOT NULL
- Man kan ikke have indekser på felter der er TEXT, men
godt på for eksempel CHAR(30) og VARCHAR(30).
- MySQL ignorerer erklæringerne FOREIGN KEY og
CHECK og REFERENCES ved oprettelse af en tabel.
- MySQL skelner mellem store og små bogstaver i tabelnavne (Student
er forskellig fra student) men ikke i feltnavne (snr er det samme som
Snr). Man kan bruge danske bogstaver i tabelnavne og feltnavne.
- Der er (alt for) meget mere information om MySQL i manualen. Formentlig har du mest nytte af kapitel 6: MySQL language
reference.
En mysql-klient til Windows: Mysql.exe
I stedet for at køre Mysql-klienten på ITUs Linux-maskiner
(f.eks. ssh.itu.dk>) kan du køre
en Mysql-klient på en Windows-maskine, når bare den er forbundet med
Internettet. Det virker på fuldstændig samme måde, og skal køres i en
Kommandoprompt (MS-DOS prompt). Den væsentligste ulempe (og den er
stor) er at MS-DOS forvansker de danske bogstaver i tabelnavne,
feltnavne, og tabellernes indhold.
For at køre en mysql-klient under MS-DOS på en Windows-maskine skal du
først kopiere denne fil og denne fil til C:\windows\system32 eller
C:\winnt\system32 på den lokale Windows maskine.
Der findes en række grafiske og måske mere brugervenlige
MySQL-klienter til Windows, men de er enten meget langsomme eller
virker dårligt.
Martin Elsman,
Databasestøttet Webpublicering, 2003-08-19 (oprindeligt af Peter Sestoft)