DATABASHANTERING för programmerare Lektion 3 Mahmud Al Hakim [email protected] 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