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:

  1. Log ind på en af ITUs servere (f.eks. ssh.itu.dk) ved hjælp af Secure Shell (ssh).
  2. 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
    
  3. Du bliver bedt om password (løsen). Du skal bruge det databasepassword som er sendt til dig fra sysadm, ikke dit mail-password.
  4. Prøv at oprette en tabel Familie med felterne navn og fødseldag:
      CREATE TABLE Familie (navn varchar(40), fødseldag int);
    
  5. 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.
  6. Udtræk posterne fra tabellen:
      SELECT * FROM Familie;
    
  7. Udtræk posterne sorteret på forskellige måder:
      SELECT * FROM Familie ORDER BY navn;
      SELECT * FROM Familie ORDER BY fødselsdag;
    
  8. 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:

TypeAnvendelseEksempel
intheltal117
doubleflydende-kommatal3.1415
decimal(20,2)fast-kommatal med 20 cifre, 2 decimaler464000000000.00
char(80)tekst (maks 80 tegn)'Ole Jensen'
varchar(80)tekst (maks 80 tegn)'Ole Jensen'
datedato2002-03-10
timeklokkeslet22:59:17
datetimedato og klokkeslet2002-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

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)