DATABASHANTERING
för programmerare
Lektion 3
Mahmud Al Hakim
mahmud@hakimdata.se
www.hakimdata.se
Repetition
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Vad är en RDBMS?
Vad är en primärnyckel?
Vad är en främmande nyckel ?
Vad menas med begreppet databasschema. Ge exempel?
Nämn några viktiga principer för databasdesign?
Vad menas med begreppet redundans?
Vilka tre olika typer av anomalier kan uppkomma i data?
Vad är ett NULL värde?
Beskriv kort normaliseringsprocessen?
1NF innebär odelbara attributvärden. Förklara med ett
exempel?
2
Idag
Implementation av databas
 Skapa och välja en databas
 Skapa tabeller
 Kolumntyper och datatyper i MySQL
 Ta bort tabeller och databaser
 Infoga, ta bort och uppdatera data
 Övningar
3
Exempel
personal (personalID, namn, befattning, avdelningID)
avdelning (avdelningID, namn)
personalKunskap (personalID, kunskap)
klient (klientID, namn, adress, kontaktperson,
kontaktnummer)
uppdrag (klientID, personalID, uppdragDatum, timmar)
4
SQL (Structured Query Language )
SQL
DDL
DML
5
Skapa en databas
1. Starta MySQL-monitorn
2. CREATE DATABAS personal;
6
Visa en lista på databaser
SHOW DATABASES;
7
Öppna databas
USE personal;
8
Skapa tabeller
CREATE TABLE tabellnamn (
tabelldefinition
) [type = tabelltyp];
9
Exempel: Skapa tabellen avdelning
CREATE TABLE avdelning (
avdelningID int not null auto_increment primary key,
namn varchar(30)
) type = InnoDB;
10
Visa information om tabellen
DESCRIBE avdelning;
11
Tabellen personal
create table personal (
personalID int not null auto_increment primary key,
namn varchar(80),
befattning varchar(15),
avdelningID int not null references avdelning(avdelningID)
) type=InnoDB;
12
Tabellen personalKunskap
create table personalKunskap(
personalID int not null references personal(personalID),
kunskap varchar(15) not null,
primary key (personalID, kunskap)
) type=InnoDB;
13
Tabellen klient
create table klient
(
klientID int not null auto_increment primary key,
namn varchar(40),
adress varchar(100),
kontaktPerson varchar(80),
kontaktNummer char(12)
) type=InnoDB;
14
Tabellen uppdrag
create table uppdrag
(
klientID int not null references klient(klientID),
personalID int not null references personal(personalID),
uppdragDatum date not null,
timmar float,
primary key (klientID, personalID, uppdragDatum)
) type=InnoDB;
15
Visa alla tabeller
SHOW TABLES;
16
Kolumntyper och datatyper i
MySQL
 Numeriska typer
http://dev.mysql.com/doc/mysql/en/numeric-types.html
 Sträng- och texttyper
http://dev.mysql.com/doc/mysql/en/string-types.html
 Typer för datum och tid
http://dev.mysql.com/doc/mysql/en/date-and-time-types.html
17
Ta bort databaser och tabeller
 DROP DATABASE [IF EXISTS] personal;
 DROP TABLE [IF EXISTS] uppdrag;
18
Ändra befintliga tabellstruktur
 ALTER TABLE
Exempel:
ALTER TABLE personal;
ADD INDEX namn (namn);
19
Infoga data i databasen (INSERT)
insert into avdelning values
(42, 'Ekonomi'),
(128, 'Forskning och utveckling'),
(NULL, 'Personalresurser'),
(NULL, 'Marknad');
20
insert into personal values
(7513,'Nina Larsson','Programmerare',128),
(9842, 'Bengt Svensson', 'DBA', 42),
(6651, 'Arne Persson', 'Programmerare', 128),
(9006, 'Camilla Blom', 'Systemadministratör', 128);
21
insert into personal_kunskap values
(7513, 'C'),
(7513, 'Perl'),
(7513, 'Java'),
(9842, 'DB2'),
(6651, 'VB'),
(6651, 'Java'),
(9006, 'NT'),
(9006, 'Linux');
22
insert into kund values
(NULL, 'Telco AB', 'Kungsgatan 3 Stockholm',
'Fredrik Palm', '95551234'),
(NULL, 'E-Banken', 'Sturegatan 11
Stockholm', 'Jan Ek', '95559876');
insert into uppdrag values
(1, 7513, '2003-01-20', 8.5);
23
Ersätta data (REPLACE)
 REPLACE-satsen fungerar precis som
INSERT, men skriver över rader i
händelse av en nyckelkollision.
Exempel:
replace into uppdrag values
(1, 7513, '2003-01-20', 9.5);
24
Ta bort data (DELETE)
delete from avdelning;
OBS! Tar bort alla rader i tabellen.
Begränsa med WHERE
delete from avdelning
where namn=’Marknad’;
25
VTC - Getting Started
 Gå till adressen:
http://www.vtc.com/products/mysql.htm
 Lyssna på SQL Basics
- Finding Your Way About
- Creating a Database
- Creating a Table
- Column Types-String
- Column Types-Numeric
26
Övningar efter rasten
 Svara på frågorna på sid. 79-80
 Skapa order databasen på sid. 80
 Skapa en uppsättning INSERT-satser
för att infoga data i tabellerna i din
orderdatabas.
27