1 / 13

Webprogrammering

Webprogrammering. SQL og databaser del 3. I dag. Databasetransaksjoner Søk Kodegjennomgang Oppgaveløsning. Databasetransaksjoner. For å sikre at flere sql’s blir skrevet til databasen konsistent (alle eller ingen rader) F.eks ved Innsetting i to forskjellige tabeller

Download Presentation

Webprogrammering

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Webprogrammering SQL og databaser del 3

  2. I dag • Databasetransaksjoner • Søk • Kodegjennomgang • Oppgaveløsning

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

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

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

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

  7. $db->autocommit(false); $sql = "InsertInto 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 = "InsertInto 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”; } DB-tx med feilhåndtering

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

  9. For å finne IDKunde til neste Insert $sql = "InsertInto 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 = "InsertInto bestilling (IDKunde, Varenavn, Pris) Values ('$id','$vare',$pris)"; $resultat = $db->query($sql); ……. osv Kunde Bestilling • IDKundeNavn • Adresse • … • IDBestilling • Varenavn • Pris • IDKunde

  10. Søk i databaser • Select * from ansatt where fornavn = ”Per”; • Select * from ansatt where fornavn = ”Per” and etternavn = ”Olsen”; • Rett frem søk • 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 • Select * from ansatt where fornavn Like ”%Ole%”; • Da får vi treff for • Ole Petter • Ole • Nils Ole • 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 Kolonne i ansatt • Fulltekstsøk er mulig med • Select * from ansatt where match (beskrivelse) against (”Prosjektleder Leder”). • Søker etter alle ordene i against listen (men ikke små ord som ”en”, ”og” el) • De ordene som går igjen i 50 % av radene lukes vekk • Ingen utsiling : (against (”Prosjektleder Leder” IN BOOLEAN MODE).

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

More Related