Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Høgskolen i Oslo Webprogrammering SQL og databaser del 3.

Liknende presentasjoner


Presentasjon om: "Høgskolen i Oslo Webprogrammering SQL og databaser del 3."— Utskrift av presentasjonen:

1 Høgskolen i Oslo Webprogrammering SQL og databaser del 3

2 I dag l Databasetransaksjoner l Søk l Kodegjennomgang l Oppgaveløsning

3 Databasetransaksjoner l For å sikre at flere sql’s blir skrevet til databasen konsistent (alle eller ingen rader) l F.eks ved –Innsetting i to forskjellige tabeller –Oppdatering av to forskjellige tabeller l Bruker MySql-i fortsatt l Må bruke spesiell databasemotor på alle tabellene (InnoDB)!

4 DB transaksjoner l Knytte seg til DB l Sette autocommit = false l Utføre de SQL’s som ønskes (f.eks inserts) l Sjekke om hver enkelt SQL gikk bra l Dersom alle SQL-setningene OK –Commit l Dersom feil –Rollback

5 Eksempel: Kunde-Bestilling l En kunde skal registreres i en tabell samtidig som en vare skal registreres i en annen l Dersom ikke kunden eller bestillingen kan registreres skal ingen av dem lagres Kunde IDKunde Navn Adresse … Bestilling IDBestilling Varenavn Pris IDKunde

6 DB-tx uten feilhåndtering $db = new mysqli("localhost","root","","butikk"); $db->autocommit(false); $sql = "Insert Into kunde (Navn, Adresse) Values ('$navn','$adresse')"; $resultat = $db->query($sql); $id = $db->insert_id; $sql = "Insert Into bestilling (idKunde, Varenavn, Pris) Values ('$id','$vare',$pris)"; $resultat = $db->query($sql); $db->commit(); $db->close();

7 DB-tx med feilhåndtering $db->autocommit(false); $sql = "Insert Into kunde (Navn, Adresse) Values ('$navn','$adresse')"; $resultat = $db->query($sql); $ok = true; if(!$resultat) { $ok = false; } else { if($db->affected_rows==0) { $ok=false; } $sql = "Insert Into bestilling (Varenavn, Pris) Values ('$vare',$pris)"; $resultat = $db->query($sql); if(!$resultat) { $ok = false; } else { if($db->affected_rows==0) { $ok=false; } } if($ok) { $db->commit(); echo "Innsetting OK"; } else { $db->rollback(); echo "Feil i innsettingen i databasen”; }

8 Eksempel: Kunde-Bestilling l I eksemplet er det en relasjon! l Først lagres kunden. Så skal IDKunde (autonummer) lagres i bestillingen! Kunde IDKunde Navn Adresse … Bestilling IDBestilling Varenavn Pris IDKunde

9 For å finne IDKunde til neste Insert $sql = "Insert Into kunde (Navn, Adresse) Values ('$navn','$adresse')"; $resultat = $db->query($sql); $ok = true; if(!$resultat) { $ok = false; } else { if($db->affected_rows==0) { $ok=false; } else { $id = $db->insert_id; // alt OK her! } } $sql = "Insert Into bestilling (IDKunde, Varenavn, Pris) Values ('$id','$vare',$pris)"; $resultat = $db->query($sql); ……. osv Kunde IDKunde Navn Adresse … Bestilling IDBestilling Varenavn Pris IDKunde

10 Søk i databaser l Select * from ansatt where fornavn = ”Per”; l Select * from ansatt where fornavn = ”Per” and etternavn = ”Olsen”; l Rett frem søk l Bør vurdere om dere skal ha index for fornavn og etternavn for å gjøre slike søk mer effektive.

11 Søk med Like l Select * from ansatt where fornavn Like ”%Ole%”; l Da får vi treff for –Ole Petter –Ole –Nils Ole l Her bør en index brukes på fornavnskolonnen. –Worst case da: En full index-scan (ikke en tabell-scan)

12 Søk med Match Against l Fulltekstsøk er mulig med –Select * from ansatt where match (beskrivelse) against (”Prosjektleder Leder”). l Søker etter alle ordene i against listen (men ikke små ord som ”en”, ”og” el) l De ordene som går igjen i 50 % av radene lukes vekk –Ingen utsiling : (against (”Prosjektleder Leder” IN BOOLEAN MODE). Kolonne i ansatt

13 Søk med Match Against l Må bruke en FULLTEXT index på kolonnen(e) l Bruke text-blobs istedenfor varchar: l Kolonnetype –Text : maks 64 KB –MediumText : maks 16 MB –LongText : maks 4.2 GB l Bare for MyISAM (ikke InnoDB) –Da kan man ikke gjøre databasetransaksjoner


Laste ned ppt "Høgskolen i Oslo Webprogrammering SQL og databaser del 3."

Liknende presentasjoner


Annonser fra Google