Litt om SQL språket



Kom i gang med OpenOffice og MySQL

Installering av MySQL

Litt om SQL språket

Starte mysql

Kvar finn vi databasefilene

Lage ein database

Lage ein tabell

Litt om felttyper:

Legge data inn i tabellen

Spørring mot ein tabell

Endre tabellar og database

Eit eksempel der vi lagar klasseliste for 2INA (Brukarsystem)

Koble til ei datakilde i OpenOffice

Bruk av databasen

Rediger tabellane i databasen

Lage spørring

Lage rapportar

Lage skjema

Kjelder

Starte mysql

For å starte MySQL i kommandolinjemodus brukar du utforskar og finn mappa C:\mysql\bin. Dobbeltklikk på mysql. Du har no mysql> prompten på skjermen.

Kvar finn vi databasefilene

Databasene ligg i mappa C:\mysql\data der ligg det to databaser – mysql som er ein slags administativ database som held orden på rettigheiter og tilgangar til dei andre databasene. Den andre databasen heiter test den er tom.

Lage ein database

For å vise dei databasene som alt eksisterer skriv du:

mysql>SHOW DATABASES;

Dette viser dei databasene som alt eksisterer. Når du skal lage ein ny database må den ha ei namn som er unikt for din database server. Alså ingen av dei namna som visast når du brukar SHOW DATABASES.

For å lage ein ny database skriv du:

mysql>CREATE DATABASE databasenamn;

Du har no laga ein ny database, for å kunne bruke den må du gi beskjed om det:

mysql>USE databasenamn;

Lage ein tabell

Du kan vise kva tabellar som alt finst i databasen med:

mysql>SHOW TABLES;
Lage ein tabell (entitet):
mysql> CREATE TABLE tabellnamn1(felt1 TYPE(LENGDE), felt2 TYPE(LENGDE), felt3 TYPE(LENGDE),

->felt4 TYPE(LENGDE));

TYPE er den felttypen du vel. Varchar er ein teksttype denne må spesifiserast med lengde. Char er ein type for tegn og brukast når feltet berre skal innehalde eit teikn. Date er ein type for dato. Sjå tabell lenger nede for full oversikt over dei ulike typane (side 461 i boka).

Lage ein tabell med primærnøkkel:
CREATE TABLE tabellnamn(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
felt2 TYPE(LENGDE),
felt3 TYPE(LENGDE),
felt4 TYPE(LENGDE)
PRIMARY KEY (id)
);

Litt om felttyper:

Det finnast mange ulike felttyper i MySQL, men ikkje alle er like intressante. Dei mest vanlege er heiltal og tekststrenger.

Feltnavn

Beskriving

varchar(n)

varchar(n) er eit enkelt tekstfelt med maks lengde n. Bytt ut n med et passande stort tal, men n kan ikkje vere større enn 255. Til større tekstfelt, bruk heller text.

text

text er eit stort tekstfelt. Det er veldig treigt å søke på tekstfelt og dei bør unngåast der dei kan. Men, hvis ein skal lagre større mengder data er dei vegen å gå.

int unsigned

Eit heiltal som ikkje kan ha negative verdier. Maksverdi ligg på ca 4.2 milliardar.

int

Eit heiltal mellom ca -2.1 milliardar og +2.1 milliardar

Hvis du vil bruke fleire felttypar enn dette, sjå vedlegget meir om felttypar.

Eit døme:
CREATE TABLE venner (
	idint unsigned AUTO_INCREMENT NOT NULL,
	fornavn varchar(32),
	etternavn varchar(32),
	tlf int unsigned,
	PRIMARY KEY (id)
);

For å sjå den nye tabellen kan du køyre MySQL-kommandoen DESCRIBE tabellnavn;

Legge data inn i tabellen

Dersom du skal legge inn data i tabellen er syntaksen enten slik:

INSERT INTO tabellnavn
VALUES(verdi1,verdi2,verdi3.....);

eller slik:

INSERT INTO tabellnavn(feltnavn1,feltnavn2,...,feltnavnN)
VALUES(verdi1,verdi2,...,verdiN);
Døme der vi legg data inn i tabellen venner:
INSERT INTO venner(fornavn, etternavn, tlf)
VALUES('Ingrid', 'Salt', 77777777);

Dersom du har ei tekstfil med data (der kvart felt er skilt med tabulator og det er kun ein post per linje) kan du bruke kommandoen LOAD:

LOAD DATA INFILE «namn.txt» INTO TABLE venner;

Spørring mot ein tabell

Spørre mot alle poster i tabellen:

SELECT * FROM tabellnamn;

Spørre etter alle poster i felt2;

SELECT' (felt2) FROM tabellnamn;

Spørre etter alle poster i tabellen sortert:

SELECT * FROM tabellnamn ORDER BY felt1;

Sortert i omvendt rekkefølge:

SELECT * FROM tabellnamn ORDER BY felt1 DESC;

Spørring med betingelse:

SELECT * FROM tabellnamn WHERE felt1=verdi;

Her kan du og bruke operatorene < og >.

Spørring med sammmensatt betingelse:

SELECT * FROM tabellnamn WHERE felt1>verdi AND felt1>verdi;

Sende ei spørring til ei tekstfil

SELECT * INTO OUTFILE "minedata.txt" FROM tabellnamn;

Endre tabellar og database

Når vi held på med databaser vil behovet for å endre på tabellar og felttyper ofte melde seg. MySQL har og kommandoar for dette.

Redigere data som alt ligg i databasene

UPDATE tabell SET felt='verdi' WHERE felt='verdi';

Slette postar i ein tabell

DELETE FROM tabellnamn WHERE felt='verdi';

Slette ein tabell med alt som ligg i den

DROP TABLE tabellnamn;

Slette database

DROP databasenamn;

Kommandoen ALTER TABLE vil prøve å ta vare på dei data som alt er lagt inn i databasen dersom det er mogleg. Feltnamn og nyttfeltnamn kan vere like. Eit typisk eksempel på når ein har behov for dette kan vere når eit tekstfelt er forlite og ein ynskjer å utvide dette. Det finst fleire mogleheiter ved bruk av ALTER TABLE sjå kap. 6.5.4 i manualen til MySQL.

Legge til eit felt

ALTER TABLE tabellnamn
ADD feltnamn felttype;

Fjerne eit felt

ALTER TABLE tabellnavn
DROP feltnavn;

Endre på eit felt

ALTER TABLE tabellnamn
CHANGE feltnamn
nyttfeltnamn nyfelttype;

Sette primærnøkkel som manglar

ALTER TABLE tabellnamn
ADD PRIMARY KEY(felt);

Eit eksempel der vi lagar klasseliste for 2INA (Brukarsystem)

Lag databasen:

CREATE DATABASE 2ina;

Bruk databasen:

USE 2ina;

Lag tabellen elev:

  • CREATE TABLE Elev (
  • Namn VARCHAR(30),
  • Adresse VARCHAR(30),
  • Postnummer VARCHAR(4),
  • Tlf VARCHAR(11),
  • Klasse VARCHAR(4),
  • PRIMARY KEY (Namn)
  • );

Lag tabellen Postadresse:

  • CREATE TABLE Postadresse (
  • Postnummer VARCHAR(4),
  • Poststed VARCHAR(25),
  • PRIMARY KEY (Postnummer)
  • );

Legg inn data i tabellane:

INSERT INTO Elev VALUES('Ole Olsen', ' ', '6133', '70 00 00 00', '2ØA2');

No må vi legge inn data i Postadresse tabellen:

Kopier fila Postadresse.txt til mappa c:\mysql\data\2ina\ og skriv fylgjande kommando i MySQL vinduet:

LOAD DATA INFILE 'Postadresse.txt' INTO TABLE Postadresse;

Spørringer mot databasen

Hente ut alle elevane sortert etter klasse:

SELECT * FROM Elev ORDER BY Klasse;

Hente ut alle elevane som bur i Volda:

SELECT * FROM Elev WHERE Postnummer=6100;

Hente ut alle elevane som ikkje bur i Volda:

SELECT * FROM Elev WHERE Postnummer<>6100;

Hente fram Namn, Adresse, Postnummer og Poststed:

  • SELECT Elev.Namn, Elev.Adresse, Elev.Postnummer, Postadresse.Poststed
  • FROM Elev, Postadresse
  • WHERE Elev.Postnummer=Postadresse.Postnummer;