Tilkobling og Triggere



Like dokumenter
Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

Applikasjonsutvikling med databaser

Databaser kort intro. Tom Heine Nätt

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

ORDBMS og OODBMS i praksis

Hva er Derby og Java DB? Denne forelesningen. Java Database Connectivity (JDBC) Hva er Derby og Java DB?

1. SQL datadefinisjon og manipulering

Java Database Connectivity (JDBC) Norvald H. Ryeng

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Integritetsregler i SQL

Oppgave 1 (Opprett en database og en tabell)

Integritetsregler i SQL. Primærnøkler

Videregående programmering 6

Integritetsregler i SQL

Datamodellering og databaser SQL, del 2

JDBC. Java DataBase Connectivity SQL i Java Læreboken: 8.5, s Forelesning i TDT4145, 9. mars 2004 Av Gisle Grimen

Metaspråket for å beskrive grammatikk

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

Miniverden og ER- modell

Eksamen i Internetteknologi Fagkode: ITE1526

Eksamen i Internetteknologi Fagkode: IVA1379

Sikkerhet og tilgangskontroll i RDBMS-er

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

SQL: Systemaspekter. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Systemaspekter V18 1 / 21

Bruke SQL fra Python. Med Psycopg2

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

SQL: Integritetsregler, triggere og views

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

1. Innføring i bruk av MySQL Query Browser

Oppgaver Oppgave a: Sett opp mulige relasjoner

Database security. Kapittel 14 Building Secure Software. Inf329, Høst 2005 Isabel Maldonado

Avansert bruk av SQL. Avanserte spørringer Valguttrykk Spørring på spørring Unionspørringer Delspørringer, vekselvirkende delspørringer Kvantorer

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

MySQL-database, php. Innhold. 8 MySQL-database, php. 8.1 Databasen MySQL

Å programmere databasetjeneren JavaDB. Programkoden ligger i databasen

Publisering av statiske og dynamiske websider til klasserom.net fra Dreamweaver og MySQL

Bruke SQL fra Java. Med JDBC (Java Database Connec/vity)

Repetisjon: Normalformer og SQL

Transaksjoner og flerbrukerproblematikk. Transaksjoner

>>12 Arbeide med MySQL

INF3100 V2018 Obligatorisk oppgave nr. 2

Transaksjoner og flerbrukerproblematikk. Transaksjoner

INF1300 Det meste av resten av SQL. Utleggsark v. 2.0

HTML og relasjonsdatabaser med PHP

INF1300 Det meste av resten av

SQL-omgivelser. SQL-omgivelse

10. ASP og SQL Innledning Recordset-objektet. Innhold. Referanse til læreboka Kapittel Se detaljer nedenfor.

EKSAMEN 6102 / 6102N DATABASER

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

Utvikling fra kjernen og ut

Dette er vår første obligatoriske oppgave i kurset Moderne Databaseteknologi.

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

Forelesning 3 DAS - Systemtabeller, indekser, distribuerte systemer m.m. - Tom Heine Nätt/Edgar Bostrøm

Fag TDT4145 Datamodellering og databasesystemer Øving 3: Relasjonsalgebra og SQL

UNIVERSITETET. triggere og views. Institutt for Informatikk. INF Arne Maus 1

Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

Obligatorisk oppgave 3 i Databaseadministrasjon.

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning mandag 14.

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22.

Forelesning 1 DAS - Introduksjon / Systemer / Brukeradmin - (Tom Heine Nätt /) Edgar Boström / Lars V. Magnusson

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

DBMS Database Management System (repetisjon) Programmeringsgrensesnitt. Serialiserbarhet

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

HØGSKOLEN I SØR-TRØNDELAG

Eksamen i Internetteknologi Fagkode: ITE1526

Eksamen i IBE102 Webutvikling Våren 2017.

SVARFORSLAG : Eksamen i IBE102 Webutvikling Våren 2017.

JDBC. Java Data Base Connec.vity

Guide for tilkobling til HIKT s Citrix løsning

Installasjonsveiledning

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring:

Her er eksamenssett fra Vår '09. Av Robin Sværen og Simen Arvesen.

Kapittel 11. Databasesikkerhet

Ulike DBMSer. Mest kjente: Oracle PostGreSQL* MySQL* SQLServer* DB2 SQLite Access (DBMS og utv. verktøy i ett) *Skal benyttes i kurset.

SQL Server guide til e-lector

INF1300 Introduksjon til databaser

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

Controller Brukerstøttedatabase Ottar Holstad/Cantor 09.

INF1300 Introduksjon til databaser

1. SQL spørringer mot flere tabeller

Å lage Noark 4 uttrekk selv. Thomas Sødring thomas.sodring@jbi.hio.no /

MySQL. Historikk. Nedlasting og installasjon

Eksamen i emne TDT4165 PROGRAMMERINGSSPRÅK

Databaser & objektorientering.

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen

1. Introduksjon til Oracle Express Edition

HØGSKOLEN I SØR-TRØNDELAG

HVA ER XML? extensible Markup Language En standardisert måte å strukturere ulike typer data Åpent format Enkelt:

Presentasjon av gruppe 7: Erik Østensen, Henning Østensen og Kenneth Ådalen

Oppgave 1a Definer følgende begreper: Nøkkel, supernøkkel og funksjonell avhengighet.

Trådløsnett med Windows Vista. Wireless network with Windows Vista

Velkommen til Pressis.

TDT4300 Datavarehus og datagruvedri3, Våren 2014

Kortversjon av brukerdokumentasjon Solman

Systemutvikling fra kjernen og ut, fra skallet og inn

Transkript:

Tilkobling og Triggere Lars Vidar Magnusson October 12, 2011 Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 1 / 25

Tilkobling med PHP PHP bruker databasespesifike moduler til å koble til en database. Under er et enkelt eksempel på hvordan PHP kan brukes til å koble til en MySQL database. // Koble t i l databasen $ t i l k o b l i n g = mysql connect ( HOST, BRUKERNAVN, PASSORD // Velg h v i l k e n d a t a b a s e v i s k a l bruke mysql select db ( DATABASENAVN, $ t i l k o b l i n g ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 2 / 25

Kjøre spørring med PHP Etter å ha koblet til kan man bruke tilkoblingen til å utføre spørringer. // Kjor en s p o r r i n g pa den t i l k o b l e d e databasen $ s q l = SQLSELECTSETNING ; $ r e s u l t a t = mysql query ( $ s q l, $ t i l k o b l i n g ) ; // S k r i v i n n h o l d e t i en av kolonnene f o r h v e r rad while ( $rad = mysql fetch assoc ( $ r e s u l t a t ) ) { echo $rad [ KOLONNENAVN ]. <br /> ; } Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 3 / 25

Opprydning med PHP Etter å ha koblet til og utført en spørring må man jo selvsagt også rydde opp etter seg. // F j e r n e r e s u l t a t e t f r a minnet m y s q l f r e e r e s u l ( $ r e s u l t a t ) ; // Lukke t i l k o b l i n g e n m y s q l c l o s e ( $ t i l k o b l i n g ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 4 / 25

Tilkobling med JDBC I Java så har vi mulighet til å koble til med både metode 3 og 4. Under er et eksempel på tilkobling med flerlagsmodellen. JDBC er tilgjengelig i java.sql.* // L a s t e k l a s s e n som i n n e h o l d e r d r i v e r e n C l a s s. forname ( com. FIRMA. DRIVER ) ; // Koble t i l databasen Connection conn = DriverManager. g e t C o n n e c t i o n ( j d b c : FIRMA : FIRMASPESINFO, BRUKERNAVN, PASSORD ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 5 / 25

Hente ut data med JDBC Når vi har koblet til en database kan vi bruke denne koblingen til å hente ut data. // Lag o b j e k t e t som t r e n g s f o r a u t f o r e s p o r r i n g e n Statement stmt = conn. c r e a t e S t a t e m e n t ( ) ; t r y { // U t f o r s p o r r i n g e n og s k r i v ut en kolonne f r a h v e r rad i R e s u l t S e t r e s = stmt. executequery ( SQLSELECTSETNING ) ; while ( r e s. next ( ) ) System. out. p r i n t l n ( r e s. g e t S t r i n g (KOLONNENUMMER) ) ; } catch ( SQLException s q l e ) { s q l e. p r i n t S t a c k T r a c e ( ) ; } Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 6 / 25

Sette inn data med JDBC Vi kan også bruke den samme database tilkoblingen til å sette inn data. // Lag o b j e k t e t som t r e n g s f o r a u t f o r e s p o r r i n g e n Statement stmt = conn. c r e a t e S t a t e m e n t ( ) ; t r y { // U t f o r i n s e t t i n g e n R e s u l t S e t r e s = stmt. executequery ( SQLINSERTSETNING ) ; } catch ( SQLException s q l e ) { s q l e. p r i n t S t a c k T r a c e ( ) ; } Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 7 / 25

Rettelse i forhold til.net og database tilkobling Se slide om.net tilkobling fra forrige leksjon. Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 8 / 25

Tilkobling med.net Som med Java så kan vi med.net koble til databaser ved hjelp av flere metoder. Under er et eksempel på hvordan en tilkobling gjøres med metode 3 mot en SQL Server server. Denne modulen er tilgjengelig i System.Data.SqlClient namespace. // Koble t i l med t i l k o b l i n g s s t r e n g s t r i n g c o n n e c t i o n S t r i n g = Data Source=HOST; + I n i t i a l C a t a l o g=databasenavn; + I n t e g r a t e d S e c u r i t y=t r u e ; S q l C o n n e c t i o n c o n n e c t i o n = new S q l C o n n e c t i o n ( c o n n e c t i o n S t r i n // Apne d a t a b a s e k o b l i n g e n c o n n e c t i o n. Open ( ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 9 / 25

Lese data med.net Når vi har fått opprettet koblingen kan vi utføre operasjoner e.g. hente ut data. // Lag o b j e k t e t som s k a l b r u k e s f o r a k j o r e s p o r r i n g e n SqlCommand command = new SqlCommand ( SQLSELECTSETNING, c o n // Kjor s p o r r i n g e n og k j o r en l o k k e gjennom r e s u l t a t e t SqlDataReader r e a d e r = command. ExecuteReader ( ) ; while ( r e a d e r. Read ( ) ) Console. W r i t e L i n e ( {0}, r e a d e r [ 0 ] ) ; // Rydd opp e t t e r s p o r r i n g r e a d e r. C l o s e ( ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 10 / 25

Triggere og prosedyrer Triggere og prosedyrer ligner på hverandre i forhold til API og syntax, men de skiller seg i hvordan de brukes. Triggere er programkode som blir kjørt ved visse hendelser i en database. Automatisere en velkomstmail når en ny bruker blir lagt til Automatisk legge til rader i en avhengig tabell. Prosedyrer er programkode som vi selv kan eksekvere etter behov. Sjekke database for uønskede kunder Lage forenklede grensesnitt for innsetting i tabeller Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 11 / 25

Eksempler på triggere Triggere er anvendelige til mye forskjellig Sjekke inndata for å garantere gyldige verdier Sjekke oppdaterte verdier for gyldige verdier Utføre flere hendelse ved sletting Kan brukes til å automatisere applikasjonsregler e.g. ivareta en sum Kan brukes til å automatisere alarmer Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 12 / 25

Fordeler og ulemper med triggere Fordeler: Siden applikasjonsregler kan settes opp med triggere vil man alltid være sikker på at alle tilkoblede applikasjoner følger sammer regler. Man slipper å sende data over nettverket Databaser er gode på databehandling Ulemper: Ulike DBMSer bruker ulikt språk med ulike muligheter for definisjon av triggere Programreglene i databasen gjør det vanskelig å bytte database Kan gjøre det vanskeligere å debugge applikasjoner Kan føre til dobbelt opp med kode for feilsjekking De kan ofte bli vanskelige å skrive, da språkene typisk ikke er hverken veldokumenterte eller elegante. Alle applikasjoner må følge regler satt av triggere Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 13 / 25

Tips til triggere Siden triggere har såpass mange ulemper, må man være forsiktig med når man tar de i bruk. Bruk triggere kun på universelle regler La grenseverdier, feilmeldinger osv. bli hentet fra en lett tilgjengelig tabell Sørg for at alle inkluderte triggere er veldokumenterte Vær påpasselig med rekursive triggere. Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 14 / 25

Jobbe med triggere Det er ulik syntax i de ulike DBMSene, men visse ting har de til felles. CREATE TRIGGER triggernavn DROP TRIGGER triggernavn De kan operere på ulike events DELETE INSERT UPDATE Timingen kan styres BEFORE AFTER INSTEAD OF Det varierer om man kan ha flere triggere på samme hendelse og timing Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 15 / 25

Triggere i MySQL MySQL har en implementasjon for triggere, men den er veldig begrenset. CREATE [ DEFINER={u s e r CURRENT USER} ] TRIGGER t r i g g e r n a m e TRIGGER TIME TRIGGER EVENT ON table name FOR EACH ROW t r i g g e r s t m t Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 16 / 25

Eksempler på triggere i MySQL Under er noen enkle eksempler på triggere i MySQL CREATE TABLE t r i g g e r t e s t ( navn VARCHAR(15) PRIMARY KEY, v e r d i INT ) ; CREATE TRIGGER t t h t r i g g e r i n s e r t BEFORE INSERT ON t r i g g e r t e s t FOR EACH ROW INSERT INTO t r i g g e r t e s t h i s t o r i e VALUES(NOW( ),NEW. navn,new. v e r d i ) ; CREATE TRIGGER t t h t r i g g e r u p d a t e BEFORE UPDATE ON t r i g g e r t e s t FOR EACH ROW INSERT INTO t r i g g e r t e s t h i s t o r i e VALUES(NOW( ),NEW. navn,new. v e r d i ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 17 / 25

Eksempler på triggere i MySQL Her er det et enda et eksempel på triggere i MySQL CREATE TABLE t r i g g e r t e s t ( i d i n t PRIMARY KEY, a l d e r INT ) ; CREATE TRIGGER i n s e r t s j e k k BEFORE INSERT ON t r i g g e r t e s t FOR EACH ROW BEGIN IF NEW. a l d e r < 0 THEN SET NEW. a l d e r = 0 ; ELSEIF NEW. a l d e r > 100 THEN SET NEW. a l d e r = 1 00; END IF ; END Her trengs det også en trigger for UPDATE for å unngå inkonsistens. Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 18 / 25

Triggere i SQL Server Triggerimplementasjonen i SQL Server er mere kompleks enn hos MySQL. Her støttes et ganske så komplett programmeringsspråk. CREATE TRIGGER t r i g g e r n a m e ON { table view } [ WITH ENCRYPTION ] { { FOR AFTER INSTEAD OF } { [INSERT] [, ] [UPDATE] [, ] [DELETE] } [ WITH APPEND] [NOT FOR REPLICATION ] AS [ { I F UPDATE ( column ) [ { AND OR } UPDATE ( column ) ] [... n ] IF ( COLUMNS UPDATED ( ) { b i t w i s e o p e r a t o r } u p d a t e d { c o m p a r i s o n o p e r a t o r } column bitmask [... n ] } ] s q l s t a t e m e n t [... n ] } Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 19 / 25

Eksempler på triggere i SQL Server Her er et enkelt eksempel på en trigger i SQL Server som skriver ut fullt navn på nye personer som gblir lagt til. CREATE TABLE p e r s o n ( i d INT, f o r n a v n VARCHAR( 5 0 ), e t t e r n a v n VARCHAR( 5 0 ) ) ; CREATE TRIGGER t r i g a d d P e r s o n ON p e r s o n FOR INSERT AS DECLARE @ f u l l t N a v n VARCHAR( 1 0 0 ) ; SELECT @ f u l l t N a v n = (SELECT f o r n a v n + + e t t e r n a v n FROM INSERTED ) ; PRINT Ny p e r s o n med navn + @ f u l l t N a v n + l a g t t i l. Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 20 / 25

Eksempler på triggere i SQL Server Og her er et annet eksempel på trigger i SQL Server som tar for seg oppdatering av en person. CREATE TRIGGER t r i g u p d a t e P e r s o n ON p e r s o n FOR UPDATE AS DECLARE @oldname VARCHAR( 1 0 0 ) ; DECLARE @newname VARCHAR( 1 0 0 ) ; IF NOT UPDATE( f o r n a v n ) AND NOT UPDATE( e t t e r n a v n ) BEGIN RETURN END SELECT @oldname = (SELECT f o r n a v n + + e t t e r n a v n FROM D e l e t e d ) ; SELECT @newname = (SELECT f o r n a v n + + e t t e r n a v n FROM I n s e r t e d ) ; PRINT Navnet b l e f o r a n d r e t f r a + @oldname + t i l + @newname + ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 21 / 25

Eksempler på triggere i SQL Server Det tredje eksempelet sørger for at det skrives ut en melding når personen med id = 1 blir slettet. CREATE TRIGGER t r i g d e l P e r s o n ON p e r s o n FOR DELETE AS DECLARE @id AS I n t ; SELECT @id = (SELECT i d FROM D e l e t e d ) ; IF ( @id = 1) BEGIN PRINT Du s l e t t e t naa p e r s o n 1!!! END; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 22 / 25

Eksempler på triggere i SQL Server Her er et eksempel som bruker INSTEAD OF til å hindre at rader kan slettes fra en tabell. CREATE TRIGGER t r i g d e l P e r s o n 2 ON p e r s o n INSTEAD OF DELETE AS PRINT Fra denne t a b e l l e n kan data a l d r i s l e t t e s : ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 23 / 25

CREATE TRIGGER t r i g c o u n t P e r s o n ON p e r s o n FOR INSERT,UPDATE,DELETE AS DECLARE @newname VARCHAR( 1 0 0 ) ; SELECT @newname = (SELECT e t t e r n a v n FROM I n s e r t e d ) ; IF NOT EXISTS (SELECT FROM N a v n T e l l i n g WHERE e t t e r n a v n = @newname ) BEGIN INSERT INTO N a v n T e l l i n g VALUES(@newName, 1 ) ; END UPDATE N a v n T e l l i n g SET a n t a l l = (SELECT COUNT( ) FROM Person WHERE e t t e r n a v n = @newname ) WHERE e t t e r n a v n = @newname ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 24 / 25 Eksempler på triggere i SQL Server Her er et eksempel som bruker en annen tabell til å ivareta hvor mange forekomster det finnes av hvert etternavn i person. CREATE TABLE N a v n T e l l i n g ( e t t e r n a v n VARCHAR( 4 5 ), a n t a l l i n t

Eksempler på triggere i SQL Server Her er et siste eksempel som sender mail når nye personer legges til CREATE TRIGGER t r i g s e n d M a i l N y P e r s o n ON Person FOR INSERT AS DECLARE @navn AS VARCHAR( 1 0 0 ) ; DECLARE @melding AS VARCHAR( 1 5 0 ) ; SELECT @navn = (SELECT f o r n a v n + + e t t e r n a v n FROM i n s SELECT @melding = Ny kunde l a g t t i l : + @navn ; EXEC master.. x p s e n d m a i l @ r e c i p i e n t s= tom. h. n a t t @ h i o f. no, @message = @ melding, @ s u b j e c t = Ny kunde l a g t t i l ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 25 / 25