Samenvatting Databanken 1 door Simon Cek en Niels Vermeiren

Jan 13, 2020 | Publisher: vibex5 | Category: Other |   | Views: 15 | Likes: 1

"edocr

Samenvatting slides gegevensbanken Niels Vermeiren & Simon Cek 1 Non Correlated Subquery’s  Niet gecorreleerde subquery = Tabelexpressie binnen een tabelexpressie  Resultaat wordt doorgegeven aan aanroepende tabelexpressie  Subquery’s mogen genest zijn 1.1 Scalaire subquery = 1 rij, 1 waarde 1.2 Rij – subquery = 1 rij 1.3 Kolom – subquery = elke rij 1 waarde 1.4 Tabel – subquery = verzameling rijen en kolommen  From – component bevat subquery  Tijdelijk resultaat  Geen order by  Subquery moet pseudoniem krijgen 2 Joins 2.1 FROM  Bevat tabelspecificaties  Kunnen subquery’s zijn  Impliciete joins > expliciete joins 2.2 Expliciete inner join 2.3 Expliciete Full Outer Join 2.4 Expliciete Left Outer Join 2.5 Outer Joins  Left-outer-join:  Alle rijen uit linker tabel met eventueel bijhorende gegevens uit rechter tabel, anders NULL waardes  Right-outer-join:  Alle rijen uit rechter tabel met eventueel bijhorende gegevens uit de linker tabel, anders NULL waardes  Full-outer-join:  Alle rijen uit linker tabel en alle rijen uit rechter tabel met eventueel bijhorende gegevens uit andere tabel, anders NULL waardes 2.6 Condities From vs Where  Extra voorwaarden mogen  Let op er is een verschil met where! 2.7 Cross Join = expliciet cartesisch product 2.8 Union Join = elke rij van elke tabel wordt 1 maal opgenomen en aangevuld met null-waardes voor de kolommen uit de andere tabel. NIET ondersteund door postgresql 2.9 Natural Join = natuurlijke join, lexiografisch 2.10 Equi/Theta Join Equi – join = vergelijking met = Theta – join = vergelijking met een andere vergelijkingsoperator 2.11 Lateral Join Subqueries die voorkomen in de FROM kunnen vooraf gegaan worden door het sleutelwoord LATERAL. Dit laat hen toe te verwijzen naar kolommen verzorgd door de voorgaande FROM items. Zonder LATERAL, wordt elke subquery onafhankelijk geëvalueerd en kan er zo geen kruisende verwijzing gemaakt worden naar een ander FROM item. 3 Gecorreleerde subquery’s 3.1 Subquery’s in WHERE Welke soort subquery mogelijk is, hangt af van de gekozen operator. =, >, ALL >= ALL >ANY >= ANY [geslacht, plaats], [geslacht], [] 6.2 CUBE SELECT row_number() over () as volgnr, geslacht, plaats, count(*) FROM spelers GROUP BY geslacht, plaats WITH CUBE ORDER BY geslacht, plaats Bij deze query krijgt men eerst per geslacht en plaats het aantal spelers, dan per geslacht het aantal spelers(plaats is hier leeg), daarna per plaats het aantal spelers(geslacht is hier leeg) en als laatste het totaal aantal spelers. Volgorde van verwerking: [geslacht,plaats] , [geslacht], [plaats], [] 6.3 GROUPING SETS =>Uitgebreide vorm van GROUP BY  Meer mogelijkheden bv. SELECT geslacht, plaats, count(*) FROM spelers GROUP BY GROUPING SETS ((plaats),(geslacht)) ORDER BY 2, 1  GROUP BY() : alle rijen in één groep bv. SELECT geslacht, plaats, count(*) FROM spelers GROUP BY GROUPING SETS ((geslacht, plaats),(geslacht), ()) ORDER BY 1, 2 6.4 ROLL & CUBE  Vereenvoudiging door ROLLUP bv. SELECT geslacht, plaats, count(*) FROM spelers GROUP BY ROLLUP (geslacht, plaats) ORDER BY 1, 2  Vereenvoudiging door CUBE bv. SELECT geslacht, plaats, count(*) FROM spelers GROUP BY CUBE (geslacht, plaats) ORDER BY 2, 3 6.5 Combinaties Meerdere groeperingen zijn samen mogelijk Mogelijkheden :  1 grouping set + 1 simpele : toevoeging: GROUP BY E1, GROUPING SETS((E2)) = GROUPING SETS((E2, E1))  2 grouping sets : « vermenigvuldiging » van specificaties (binnen één GROUP BY)  Meerdere grouping sets samen : omzetting  Bv GROUP BY GROUPING SETS (E1,E2),E3= GROUP BY GROUPING SETS ((E1,E3),(E2,E3)) ● Union ! ● CHECK BOEK PG 303 en verder voor UITLEG 7 Limiting result sets  EXPLAIN : plaats bovenaan de query om uitvoertijd etc. te bekijken.  FETCH FIRST # ROWS ONLY: haal alleen de eerste # rijen op (na ORDER BY)  OFFSET: plaats vanwaar te starten (na ORDER BY, voor FETCH)  LIMIT wordt niet gebruikt! Vb. SELECT spelersnr, naam, geb_datum FROM spelers ORDER by geb_datum OFFSET 2 ROWS FETCH FIRST 3 ROWS ONLY; = haalt rij [3,5] op 8 Set-operatoren SET-operatoren: combineren van resultaten van individuele SELECT-instructies. 8.1 UNION = elke rij die in één van de twee selectblokken of in beide voorkomt. (dubbele rijen worden verwijderd) Vb. Geef het spelersnummer van elke speler voor wie minstens één boete is betaald, of die aanvoerder is of voor wie beide geldt SELECT spelersnr FROM boetes UNION SELECT spelersnr FROM teams Regels:  De verschillende blokken moeten hetzelfde aantal kolommen hebben en de kolommen die aan elkaar « geplakt » worden, moeten hetzelfde datatype hebben.  Alleen op het einde mag een ORDER BY voorkomen, deze sorteert het eindresultaat.  SELECT moet geen DISTINCT bevatten (dubbele rijen worden automatisch verwijderd) 8.2 INTERSECT = alleen die rijen die in de resultaten van de beide selectblokken voorkomen (dubbele rijen worden verwijderd). Vb. Geef het spelersnummer van de spelers die aanvoerder zijn en voor wie minstens één boete is betaald SELECT spelersnr FROM teams INTERSECT SELECT spelersnr FROM boetes 8.3 EXCEPT = alleen die rijen die wel in het resultaat van het eerste select-blok voorkomen maar niet in het resultaat van de tweede select blok(dubbele rijen worden verwijderd). Vb. Geef het spelersnummer van de spelers voor wie minstens één boete is betaald, maar die geen aanvoerder zijn SELECT spelersnr FROM boetes EXCEPT SELECT spelersnr FROM teams 8.4 ALL = behoud van dubbels  Standaard worden dubbele rijen verwijderd  ALL-variant: gebruiken om dubbele rijen te behouden  UNION ALL  INTERSECT ALL  EXCEPT ALL Vb. Geef het spelersnummer van de spelers voor wie minstens één boete is betaald, maar die geen aanvoerder zijn. Behoud dubbele rijen. SELECT spelersnr FROM boetes EXCEPT ALL SELECT spelersnr FROM teams 8.5 NULL Rijen met een NULL-waarde worden als gelijk beschouwd door de set-operatoren! 8.6 Combinaties  Meerdere set-operatoren  Haakjes kunnen de volgorde wijzigen Vb.Geef het spelersnummer van de spelers voor wie minstens één boete is betaald, maar die geen aanvoerder zijn, en daarenboven de spelers uit Hove. (SELECT spelersnr FROM boetes EXCEPT SELECT spelersnr FROM teams) UNION SELECT spelersnr FROM spelers WHERE plaats = ‘Hove’ 9 ALTER object 9.1 Wijzigen van tabelstructuur  ALTER TABLE: wijzigt structuur Vb. Karakterset veranderen convert to character set utf8 collate utf8_general_ci Vb. Rename table RENAME TABLE spelers TO tennissers Of ALTER TABLE spelers RENAME TO tennissers 9.2 Wijzigen van kolommen  ALTER TABLE: wijzigt de structuur - ADD: kolom toevoegen - DROP verwijdert een kolom - ALTER: verandert de kolomeigenschappen Vb. Alter table spelers alter plaats varchar(5) not null 9.3 Wijzigen van integriteitsregels  ALTER TABLE: wijzigt de structuur - ADD CONSTRAINT: voegt integriteitsregel toe - DROP CONSTRAINT: verwijderd integriteitsregel Vb. Foreign key add constraint FK2 foreign key (spelersnr) references spelers (spelersnr) Vb. Primary key ALTER TABLE table_name ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...); Vb. Check constraint ALTER TABLE table_name ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION); Vb. Unique constraint ALTER TABLE table_name ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...); 9.4 Wijzigen van database  ALTER DATABASE Vb. create database tennis2 default character set sjis default collate sjis_japanese_ci 9.5 Invoeren/verwijderen van gebruikers  CREATE USER: creëert een user Vb. Create user Frank identified by Frank_pw  ALTER USER: verandert het paswoord Vb. Alter user Frank identified by Frank_pasw  DROP USER: verwijdert een user Vb. Drop user Frank 9.6 Insert voorbeeld INSERT INTO table_x SELECT * FROM table_y; INSERT INTO teams VALUES (null, 6, ‘Derde’); 10Common Table Expressions = vergelijkbaar met subquery’s in the FROM, maar met extra’s. 10.1 Recursie Opgepast:  Oneindige lussen  Geen controle door CTE’s  Zelf controles inbouwen! 10.2 Strategieën voor oneindige lus detectie  Teller  Lus detectie Deze 2 zijn combineerbaar! Optie1 Optie2 10.3 Inserts met CTE’s 10.4 Delete met CTE’s 10.5 Voorbeelden + Deze geeft voor elke naam in tabel spelers, een lijst van alle niet-zelfde namen die even lang zijn terug. Tussen resultaten wegschrijven naar debug_table om eventuele fouten te vinden. ROW(l.*) = pak alles van de geselecteerde rij Resultaat: 11XML  eXtensible Markup Language  DTD (of xml schema)  Eerste versie van xml standaard verscheen in 1998  Hierachische structuren in een nieuw kleedje  Platte tekstbestanden  ISO standaard 11.1 Eenvoudige XML syntax  Gebruik een tag om aan te geven waar men begint en eindigt  Elk document moet in 1 root tag omvat zijn  Beginnen met een cijfer mag NIET!  Case sensitive!  Tags mogen genest worden Vb. tekst 11.2 Doel  Xml(data) vs html(vorm) => (xsl vs css)  Om zowel hiërarchische datastructuren te omschrijven als ze te bevatten  Om data uit te wisselen tussen verschillende gegevensbronnen 11.3 META data  Je kan attributen aan je tags meegeven (deze staan tussen “ “ of ‘ ‘)  Gebruik dit enkel om META data weer te geven (bv eigenschappen)  Data zelf hoort daar niet thuis! Vb lalalala.mp3 11.4 Uitbreidingen  Xml word bv ook gebruikt om configuraties van software bij the houden vb menubalk,…  Er zijn verschillende formaten die van deze standaard gebruik maken: Xhtml, xml dom, xsl, xslt, xpath,xsl-fo,xlink, xpointer, dtd, xsd, xforms, etc. 11.5 Pro vs Contra ISO Redundantie tov relationeel model Uitwisselbaarheid Sequentieel Eenvoud Traag Gn hiërarchische engine nodig … … 11.6 RDBMS  Verschillende RDBMS voorzien manieren om xml te gebruiken! 11.7 Voorbeelden SELECT xmlcomment('hallo'); xmlcomment -------------- ------------vb 2 ----------------- select xmlforest(divisie, teamnr) from teams; xmlforest ere 1 tweede2 12Datatypes  Numeric  currency  Character  Binair  time  Boolean  … 12.1 Algemen verschillen voor teken-datatypes Char(n) : vaste lengte => plaats wordt gereserveerd, ook indien deze plaats niet gebruikt wordt Varchar(n): variabele lengte, flexibele lengte met maximum => trager Tekst: onbeperkte variabele lengte, meest flexibel => traagst 12.2 Strings vs Identifiers Een String wordt aangeduid d.m.v. ‘ ‘ quotes. Een identifier wordt aangeduid d.m.v “ “ quotes. Sql = standaard uppercase. 13Creatie en ontwerp 13.1 Invoeren van nieuwe rijen INSERT INTO  Één rij invoeren in een tabel  Tabel vullen met rijen van een andere tabel Command: INSERT Description: create new rows in a table Syntax: [ WITH [ RECURSIVE ] with_query [, ...] ] INSERT INTO table_name [ ( column_name [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ] 13.2 Tabel vullen vanuit andere tabel Tabel wordt gevuld met rijen uit een andere tabel Regels:  Dit mag dezelfde tabel zijn  In de tabelexpressie mag alles staan zoals in een “gewone” tabelexpressie  Aantal kolommen in INSERT INTRO moet gelijk zijn aan aantal expressies in SELECT  De datatypes van de kolommen moeten overeenkomen met de expressies in de SELECT Vb. Create table recreanten (spelersnr smallint not null, naam char(15) not null, plaats char(10) not null, primary key(spelersnr) ) Insert into recreanten (spelersnr, naam, plaats) select spelersnr, naam, plaats from spelers where bondsnr is null 13.3 Wijzigen van waarden in rijen UPDATE: waarde worden gewijzigd Vb. Update wedstrijden set gewonnen = 0 where spelersnr in (select spelersnr from spelers where plaats = ‘Den Haag’) 13.4 Verwijderen van rijen uit een tabel DELETE: rijen worden verwijderd Vb. delete from spelers where jaartoe > (select avg(jaartoe) from spelers) 13.5 Opzetten van nieuwe tabellen CREATE TABLE: creëert lege tabel Vb Create table SPELERS ( spelersnr smallint not null, naam char(15) not null, voorletters char(3) not null, geb_datum date , … primary key (spelersnr) ) Tabelschema: tabel(tabelnaam) Kolomdefinitie: kolomnaam + datatype + null-specificatie+integriteitsregel 13.6 Datatypes van kolommen Integer: gehele getallen - tinyint - smallint - integer(int) Decimal: niet-gehele getallen - decimal( , ) (dec) = numeric Float: heel grote/kleine getallen - single precision - double precision Alfanumerieke: karakter - charachter(char) - varchar - long varchar Temporal : datum en tijd - Date - Time - Timestamp Boolean : true / false Blob (basic large object) 13.7 Creëren van tijdelijke tabellen Tijdelijke tabellen: Create temporary table SOMBOETES ( totaal decimal(10,2)) Insert into somboetes select sum(bedrag) from boetes 13.8 Kopiëren van tabellen create table teams_kopie2 as (select * from teams) 13.9 Naamgeving tabellen-kolommen Beperking in de keuze:  2 tabellen uit hetzelfde database_schema : verschillende namen  2 kolommen in één tabel : verschillende namen  lengte van naam is beperkt  alleen letters, cijfers en enkele symbolen  beginnen met een letter  geen gereserveerde woorden  Zoniet werken met identifiers “” Naamkeuze is zeer belangrijk!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !  korte namen (niet cryptisch)  tabelnaam in meervoud  geen « informatiedragende » namen  consistente naamgeving  geen te lange namen  kolommen met eenzelfde betekenis, dezelfde naam  Kolommen met vergelijkbare populaties, dezelfde naam  geen termen uit het besturingssysteem 13.10 kolom-opties: default – comment Defaultwaarde als laatste bij kolomdefinitie. Create table boetes (betalingsnr integer not null primary key, spelersnr integer not null, datum date not null default ‘1990-01-01’, bedrag decimal(7,2) not null default 50.00); 13.11 tabellen en de catalogus 2 catalogustabellen: 13.12 specificeren van de integriteitsregels  consistentie  correctheid 13.13 integriteit bij primaire sleutel  kolom waarvan de waarde uniek moet zijn (nooit null)  samengestelde primary key Regels:  maximaal één primaire sleutel per tabel  uniciteitsregel : waarde is uniek  minimaliteitsregel : geen overbodige kolom  kolomnaam : 1 maal in primaire sleutel  Integriteitsregel : kolom mag geen NULL zijn Raad: minimaal één primaire sleutel per tabel 13.14 Integriteit bij alternatieve sleutels  Kolom waarvan de waarde uniek is, alternatief voor primary key  Mag niet null zijn  In SQL: na de kolom, m.b.v. UNIQUE 13.15 Refererende sleutels  Kolom die verwijst naar primaire sleutel uit een andere tabel  In SQL: FOREIGN KEY(kolom) REFERENCES tabel(kolom) Regels:  Gerefereerde tabel : bestaan of gecreëerd worden  Gerefereerde tabel : een primaire sleutel bevatten  Gerefereerde tabel :  Kolomnaam aanduiden  Geen kolomnaam aanduiden (zelfde kolomnaam !)  Refererende sleutel mag NULL zijn  Aantal kolommen moet gelijk zijn  Datatypes van de kolommen moeten gelijk zijn Merk op:  Refererende sleutel mag uit meerdere kolommen bestaan  Een kolom mag deel zijn van verschillende refererende sleutels  Een deel (of alle) waarden van een primaire sleutel mag een refererende sleutel zijn  Refererende tabel mag = gerefereerde tabel 13.16 De refererende actie Bij UPDATE & DELETE:  RESTRICT(default) : verboden  CASCADE : doorgetrokken naar de refererende tabel  SET NULL : NULL waardes in de refererende tabel. 13.17 Check-integriteitsregels = geven aan welke waardes toegelaten zijn SQL: CHECK( ) geslacht char(1) not null check (geslacht in (‘M’, ‘V’)), 13.18 Namen aan integriteitsregels Bij foute insturctie: foutboodschap => voor duidelijkheid geeft men een naam aan integriteitsregel. Create table spelers (spelersnr integer not null constraint primaire_sleutel_spelers primary key, … geslacht char(1) not null constraint toegestane_waarden_geslacht check (geslacht in (‘M’, ‘V’)), … 13.19 Integriteitsregels voor verwijderen DROP TABLE:  Primaire, refererende en alternatieve sleutels verdwijnen  Refererende sleutels waarvan de tabel de gerefereerde tabel was, verdwijnen ALTER TABLE:  Verwijderen van integriteitsregels afzonderlijk 13.20 Integriteitsregels en de catalogus  Vastleggen van de integriteitsregels gebeurt in de catalogustabellen  Afhankelijk van het product 13.21 Voorbeelden kolom- & tabel beperkingen where column_constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) [ NO INHERIT ] | DEFAULT default_expr | UNIQUE index_parameters | PRIMARY KEY index_parameters | REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] -------------------------tabel---------------------------------------------- and table_constraint is: [ CONSTRAINT constraint_name ] { CHECK ( expression ) [ NO INHERIT ] | UNIQUE ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) index_parameters [ WHERE ( predicate ) ] | FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 14Serial datatype = GEEN echte sleutel! Vb. CREATE TABLE serialdemo( id serial PRIMARY KEY, content text ); Serial creëert extra object een sequence! Zorg dat gebruiker ook rechten heeft voor die sequence via GRANT! Sequence Een sequence is een databaseobject waarmee we oplopende of aflopende, unieke of niet unieke, cyclische of niet-cyclische reeksen met nummers kunnen genereren. Vb. GRANT { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCE sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 15JDBC 15.1 What is JDBC?  De Java Database Connectivity (JDBC) API is de industrie standaard voor database-onafhankelijke verbinding tussen de Java programmeer taal en een groot assortiment van databanken, SQL databanken en andere tabelachtige gegevensbronnen, zoals spreadsheets. De JDBC API verzorgt een call-level API voor SQL gebaseerd databank toegang.  JDBC technologie laat je toe de Java programmeertaal te gebruiken om de “Write once, run anywhere” capaciteiten te exploiteren voor applicaties die toegang nodig hebben tot entreprise data. Met een JDBC technologie toegelaten driver kan je verbinden met alle bedrijfsdata, zelfs in een heterogene omgeving. 15.2 SSL  Gebruik maken van een JDBC connectie string met een niet gevalideerd ssl certificaat: “jdbc:postgresql://server/database? user=me&password=mypassword&ssl=true&sslfactory=org.postgresql.ssl. NonValidatingFactory” 16 Schema, rights, locale 16.1 Schema  Schema = namespace  Binnen één namespace moeten alle objecten een unieke naam hebben  Bij postgreSQL is de default namespace “public” (checken met : > SHOW search_path;)  Bij sommige andere producten default namespace = username 16.2 Rights(standard)  Rechten op parentobject nodig om rechten op child te kunnen uitvoeren  Default: alleen eigenaar heeft rechten 16.2.1 Rechten toekennen GRANT ON TO ; Vb. GRANT SELECT ON mytable TO PUBLIC; GRANT SELECT, UPDATE, INSERT ON mytable TO admin; GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw; 16.2.2 Rechten afnemen REVOKE ON FROM ; 16.3 Privileges (passable) = Rechten geven om rechten door te geven GRANT ON TO WITH GRANT OPTION; 16.4 Localisatie Vb1.  Character sets: ç or not, Й or not  Collating sequences: abc… A collating sequence (also called a sort sequence) defines how characters in a character set relate to each other when they are compared and ordered. Different collating sequences are useful for those who want their data ordered for a specific language. For example, lists can be ordered as they are normally seen for a specific language. A collating sequence can also be used to treat certain characters as equivalent, for instance, a and A.  Encoding: UTF-8, LATIN1,…. Vb 2.  LC_COLLATE: string order  LC_CTYPE: character classification  LC_MESSAGES: language of the message  LC_MONETARY: format currency  LC_NUMERIC: format numbers  LC_TIME: time format >SHOW LC_COLLATE; 17ODBC en native 17.1 Wat is ODBC? Open DataBase Connectivity (ODBC) is een manier om op een gestandaardiseerde manier toegang te geven aan een database, onafhankelijk van het type applicatie en van het type database. Zonder ODBC: Met ODBC: 17.2 ODBC of native? Dit hangt af van:  Welke drivers zijn er beschikbaar?(Client en Server) Afhankelijk van taal.  Zijn er prestatie of stabiliteit verschillen? Native blijft sneller, ODBC beter wanneer databases kunnen worden gewijzigd.  Wat is het verschil met jdbc? ODBC is enkel voor Microsoft-applicaties en JBDC enkel voor Java- applicaties. ODBC kan niet gebruikt worden met Java omdat ODBC onderliggend een C interface voorziet.  Wat is het verschil met pear? Pear (PHP extention and application repository) ’s Pear DB let you access databases in php for which an obdc driver is available. 18Connection pooling 18.1 Wat is connection pooling? In software ontwikkeling is een connection pool een cache van databank connecties onderhouden door de databank zo dat de connecties kunnen worden herbruikt wanneer de databank een toekomstig verzoek voor data ontvangt. Opmerking: men kan ook aan client-side pooling doen. zonder pooling: met pooling: 18.2 Waarom pooling? Pooling zorgt voor een boost in opstart prestatie (elke connectie heeft een opstart kost) Nadeel: wanneer connecties niet gebruikt worden, gebruiken ze toch (een deeltje) geheugen. 19Indexen  Doel: beïnvloeden van de verwerkingstijd!  Rijen worden in bestanden opgeslagen op het OS  Een bestand bestaat uit pagina’s  Als een rij opgehaald wordt: - De betreffende pagina wordt opgehaald - De betreffende rij wordt opgehaald 19.1 Werking van een index Er zijn 2 methodes voor het opzoeken:  Sequentiële zoekmethode: rij per rij - Tijdrovend en inefficiënt  Geïndexeerde zoekmethode: index (B-tree) - Een index in SQL is opgezet als een Boom - Deze boom bestaat dan uit een aantal Knooppunten (nodes) - Een knooppunt dat naar een rij verwijst = Leafpage - 2methodes:  Zoeken van rijen met een bepaalde, gewenste waarde  Doorlopen van de gehele tabel via een gesorteerde kolom(geclusterde index) Waarom gebruik maken van een geclusterde index? Wanneer men bv geordend op spelersnr spelers wilt opvragen gaan deze spelers gesorteerd van de schijf gehaald moeten worden. Dit kan ervoor zorgen dat een pagina meerdere malen van de schijf gelezen moet worden.(lees en bekijk tekening index boek pg 495-497). Om dit probleem te verhelpen maakt men gebruik van geclusterde indexen. Deze bepaald de volgorde van de rijen in het bestand waarin ze opgeslagen staan. Hierdoor wordt elke pagina maximaal 1 x opgehaald. Opmerkingen:  Bij aanpassing in tabel: index aangepast  Index: ook op niet-unieke kolom  Op één tabel: meerder indexen  Op één tabel: één geclusterde index  Samengestelde index Opgelet:  Index neemt opslagruimte in  Als index vol: reorganisatie van de index Meerde indexvormen zijn mogelijk! 19.2 Optimiser Voor elke ingevoerde query probeert SQL de meest efficiënte strategie voor uitvoering te bepalen. Deze analyse, ook wel query optimalisation genoemd, wordt uitgevoerd door een module binnen SQL, genaamd optimiser. Deze ontwikkelt voor elke instructie een aantal alternatieve strategieën voor uitvoering. Dit doet hij op basis van:  Verwachte verwerkingstijd  Aantal rijen  Indexen 19.3 Create index  No ANSI of ISO specification  CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ]  ( { column | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )  [ WITH ( storage_parameter = value [, ... ] ) ]  [ TABLESPACE tablespace ]  [ WHERE predicate ] Postgresql boek pagina 493: Creëren van een index CREATE INDEX spelers_postcode_idx ON spelers (postcode asc); Creëren van een unieke index CREATE UNIQUE INDEX spelers_naam_vl_idx ON spelers (naam, voorletters); Creëren van een samengestelde index CREATE INDEX spelers_naam_vl_partial_idx ON spelers (naam, voorletters) WHERE spelersnr < 100; Creëren van een geclusterde index CREATE UNIQUE CLUSTERED INDEX spelers_clustered ON SPELERS(spelersnr) 19.4 Reindex  REINDEX INDEX een_index;  REINDEX TABLE een_tabel;  REINDEX DATABASE een_database; 19.5 Index management  CREATE CREATE INDEX  ALTER ALTER INDEX groot_idx SET TABLESPACE ergens_anders  DROP DROP INDEX Vele SQL-producten:  Automatische creatie van index op primaire en alternatieve sleutels bij creatie van tabel  Naam wordt afgeleid uit naam van de tabel en de betreffende kolommen 19.6 Wat indexeren?  Voordeel: index versnelt verwerking  Nadeel: index neemt opslagruimte in en elke mutatie vraagt aanpassing van index (= vertraagde verwerking) 19.7 Welke kolommen? Richtlijnen voor keuze van kolommen:  Unieke index op kandidaatsleutels  Hierdoor kan uniciteit van nieuwe waarde snel gecontroleerd worden  Index op refererende sleutels  Omdat refererende sleutels gebruikt kunnen worden join-kolom moet deze geïndexeerd worden voor een snelle verwerkingstijd bij joins.  Index op kolommen waarop geselecteerd wordt o Grootte/#rijen van de tabel o Cardinaliteit (verschillende waarden) van de tabel o Distributie (verdeling) van de waarden  Index op een combinatie van kolommen  Van toepassing als de WHERE-component een AND bevat  Index op kolommen waarop gesorteerd wordt  Wanneer er gesorteerd moet worden maar geen index op die kolom, is er een extra sorteerslag nodig. 19.8 Speciale vormen Multi-tabelindex (join-indexen) : = index op kolommen in meerdere tabellen Vb. CREATE INDEX spel_weds ON SPELERS(spelersnr), WEDSTRIJDEN(spelersnr) Voordeel: wanneer 2 tabellen met een join op spelersnr gekoppeld worden, wordt deze join zeer snel verwerkt. Virtuele-kolomindex : = index op een expressie op voorwaarde dat de expressie geen aggregatiefuncties of subquery’s bevat. Vb. CREATE INDEX wed_halvesaldo ON WEDSTRIJDEN(gewonnen-verloren/2) Voordeel: verbetering van de verwerkingssnelheid van instructies waarbij desbetreffende expressie in de WHERE-component wordt gebruikt. (WHERE gewonne-verloren/2). Selectieve index: = index op een gedeelte van de rijen. Quote pg 514: “Stel u voor dat de WEDSTRIJDEN-tabel één miljoen rijen bevat. En stel dat de meeste gebruikers voornamelijk gegevens van de laatste 2 jaar geïnteresseerd zijn, wat neerkomt op 200.000 rijen. Al hun vragen bevatten een conditie waar de datum niet ouder is dan twee jaar. Maar er zijn enkele gebruikers voor wie de andere 800.000 rijen wel nodig zijn. Voor indexen geldt hoe meer rijen, hoe groter de indexboom wordt, en hoe langzamer de verwerking wordt. Dit kan men voorkomen met selectieve indexen.” Vb. CREATE INDEX boetes_datum ON BOETES WHERE DATUM > ‘1996-12-31’ Voordeel: snellere verwerking bij het werken met gedeelte van tabellen. Hash-index: = index op basis van het adres op de pagina maar er wordt geen indexboom gecreëerd. Deze index moet gemaakt worden voor de tabel gevuld wordt. Wanneer een hash-index wordt gecreëerd, wordt er automatisch een bepaalde ruimte op de schijf gereserveerd. Deze ruimte zal gebruikt worden voor het opslagen van rijen. Vb. CREATE HASH INDEX spelersnr_hash ON SPELERS(spelersnr) WITH PAGES = 100 Voordeel: bij een B-tree (vorige 3 items zijn hierop gebaseerd) moet men eerst de hele indexboom doorlopen voordat men bij de werkelijke rij uitkomt. Bij de hash-index springen we vrijwel meteen naar de rij toe. Bitmapindex: = interessant als er veel dubbele waardes zijn. Vb. CREATE BITMAP INDEX spelers_geslacht ON SPELERS(geslacht) Clustered index: een index waarbij een kolom de fysieke volgorde van de records op het opslagmedium bepaalt. 19.9 Nieuwere datatypes  GiST (Generalized Search Tree)  SP-GiST (space-partitioned GiST)  GIN (Generalized Inverted Index) Index catalog_table in postgresql = pg_index http://www.postgresql.org/docs/9.1/static/catalog-pg-index.html http://www.postgresql.org/docs/current/static/internals.html 20Optimaliseren van insturcties 20.1 Vermijden van OR-operator OR: index wordt meestal niet gebruikt Alternatief: IN of 2x select + UNION VB: 20.2 Onnodig gebruik van union UNION: dezelfde tabel meerdere malen doorlopen Alternatief: herformuleren waarbij alle voorwaarden in 1 select instructie staan. 20.3 Vermijd NOT-operator NOT: index wordt niet gebruikt Alternatief: vervang NOT door vergelijkingsoperatoren 20.4 Isoleer kolommen in condities Kolom in een berekening of in een scalaire functie: index wordt niet gebruikt. Alternatief: isoleer de kolom 20.5 Gebruik de BETWEEN-operator AND: gebruikt de index meestal niet 20.6 Bepaalde vormen van LIKE-operator LIKE: index wordt niet gebruikt als patroon begint met % of _ LIKE ‘#_%’ ESCAPE ‘#’ LIKE ‘\#_%’ Alternatief: GEEN 20.7 Redundante condities bij joins Redundante condities: om SQL te verplichten om een bepaald pad te keizen 20.8 Vermijd de Having-component HAVING: index niet gebruikt Alternatief: zoveel mogenlijk in WHERE 20.9 SELECT-component: smal SELECT-component zo klein mogelijk  Onnodige kolommen weglaten uit SELECT  Bij gecorreleerde subquery met exists: één expressie bestaande uit één constante 20.10 Vermijd DISTINCT DISTINCT: verwerkingstijd verlengt Alternatief: vermijden als het overbodig is 20.11 ALL-optie bij set operatoren Zonder ALL: verwerkingstijd verlengt, data moet gesorteerd worden om dubbels eruit te halen VB: ipv UNION => UNION ALL 20.12 Kies outer-joins boven UNION UNION: verwerkingstijd verlengt Alternatief: outer-join is beter 20.13 Vermijd datatype-conversies Converteren van datatypes: verwerkingstijd verlengt Alterntief: conversie datatypes vermijden 20.14 Grootste tabel als laatste Volgorde van tabellen kan belangrijk zijn! Alteratief: grootste tabel als laatste plaatsen 20.15 Vermijd ANY- en ALL- operatoren ANY en ALL: index wordt niet gebruikt Alternatief: geen 21EXPLAIN  Explain = geeft informatie over kostprijs, etc. van query  Explain Analyze = naast kostprijs ook echte uitvoeringstijd  CREATE INDEX ON TABEL(KOLOMNAAM) = index creëren SET enable_seqscan TO off = sequentieel zoeken uitzetten => zoeken op index 22Views 22.1 CREATE VIEW  View: tabel die zichtbaar is voor de gebruiker maar geen opslagruimte inneemt.  De inhoud van een view wordt afgeleid bij het gebruik van een SELECT view  Een view kan dus maar opgebouwd worden op basis van gegevens die in andere tabellen opgeslagen zitten 22.2 Nut?  Vereenvoudingen van routinematige instructies  Reorganiseren van tabellen  Stapsgewijs opzetten van SELECT-instructies  Beveiligen van gegevens View:  Bevat geen rijen!  Voorschrift of formule om gegevens uit basistabellen in een ‘virtuele’ tabel te steken 22.3 Creëren van views  CREATE VIEW: creëert een view  Views: raadplegen en muteren + synoniemen en commentaar! 22.4 Kolomnamen van views SELECT definieert de kolomnamen, maar expliciete definitie is ook mogelijk! Expliciete definitie is verplicht als kolom bestaat uit een functie of berekening. 22.5 With check option Muteren van views => muteren van tabellen WITH CHECK OPTION controleert:  Update: aangepaste rijen behoren nog tot view  Insert: nieuwe rij behoort tot view  Delete: verwijderde rij behoort tot view 22.6 Verwijderen van views DROP VIEW: verwijdert view en alle hierop gedefinieerde views 22.7 Beperkingen bij muteren SELECT, INSERT, UPDATE, DELETE van views Maar mutatie mag alleen als:  View moet direct/indirect gebaseerd zijn op één of meerdere basistabellen  Select mag geen distinct bevatten  Select mag geen aggregatiefunctie bevatten  FROM mag slechts één tabel bevatten  Select mag geen GROUP BY bevatten  Select mag geen ORDER BY bevatten  Select mag geen set-operatoren bevatten  (UPDATE) Virtuele kolom mag niet gewijzigd worden  (INSERT) In select moeten alle not null-kolommen staan 22.8 Verwerken van instructies op views  Extra stap waarin viewformule wordt opgenomen (check-option) 22.9 Toepassingen van views  Vereenvoudigen van routinematige instructies  Instructies die vaak gebruikt worden  Reorganisatie van tabellen  Bij aanpassingen “oude” programma’s laten bestaan  Stapgewijs opzetten van select-instructies  Bij complexe queries stukken “voorprogrammeren”  Specificeren van integriteitsregels  With check option: toegestane waarden controleren  Gegevensbeveiliging  Beveiligen van delen van tabellen 22.10 Beveiliging Beveiligen! SQL gebruiker:  Moet gekend zijn  Wachtwoord  Expliciete toekenning van bevoegdheden  Kolombevoegheden  Tabelbevoegheden  Databasebevoegdheden  Gebruikersbevoegdheden 22.11 Invoeren/verwijden van gebruikers CREATE USER: creëert een user Vb. Create user Frank identified by Frank_pw ALTER USER: verandert het paswoord Vb. Alter user Frank indentified by Frank_pw DROP USER: verwijdert een user Vb. Drop user Frank 22.12 Tabel- en kolombevoegdheden GRANT: kent bevoegdheden toe Soorten tabelbevoegheden:  SELECT: bevoegheid tot select en view  INSERT: rijen toevoegen  DELETE: rijen verwijderen  UPDATE: rijen wijzigen  REFERENCES: refererende sleutels naar deze tabel creëren  ALTER: tabel veranderen  INDEX: indexen creëren (tabel)  ALL-ALL PRIVILEGES: alle bevoegdheden 22.13 Databasebevoegdheden Idem vorige +  DROP: tabellen verwijderen  CREATE TEMPORARY TABLES:  CREATE VIEW  CREATE ROUTINE: nieuwe stored procedure/functie  ALTER ROUTINE:  EXECUTE ROUTINE  LOCK TABLES: bestaande tabellen blokkeren 22.14 Gebruikersbevoegdheden = databasebevoegheden toekennen aan gebruiker CREATE USER: gebruiker aanmaken 22.15 With grant option = de gebruikers die toegang krijgen, kunnen deze machtiging doorgeven aan andere gebruikers 22.16 Werken met rollen CREATE ROLE: creëert een rol met bevoegdheden voor een aantal users, als de rol verandert, veranderen de bevoegdheden voor al de betrokken users. DROP ROLE: verwijdert de rol 22.17 Intrekken van bevoegheden REVOKE: verijdert bevoegdheid (en de afhankelijke bevoegdheden) 22.18 Beveiliging van en met views  Analoog voor bevoegdheden op views  Kan gebruikt worden voor de beveiliging van gegevens Gebruiker krijgt enkel machtiging op een view, waarin een deel van de tabel gedefinieerd wordt 23Beveiliging  Hardware  Het platform waar het op draait  De databank software  Binnen sql zelf (grant, revoke, view,..)  Sql als “vertaler”  Algemeen terugkerende security problematiek  (zie 3ti, bv authenticatie, maar ook backups, ..)  .. 23.1 Ondersteunend platform  Up to date houden  Beveiligen  DDOS attacks 23.2 Databank software  Up to date houden  Configuratie o Local o Remote  Known exploits -> Wat doe je? 23.3 Within SQL  User management(roles)  Privileges(grant/revoke)  Views  Stored procedures 23.4 SQL  SQL wordt niet gecompileerd  SQL wordt “vertaald” in de onderliggende/omsluitende laag  Dit kan gebruikt worden om sql ongewenste instructies te laten uitvoeren  Het is probleem dat bij elke taal die “vertaald”, terugkomt (eg php) 23.5 SQL Injection  Indien we de onderliggende sql code van bv een formulier niet kennen, dan gaan we proberen te raden wat de sql code is die erachter zit.  Ipv gewone waarden gaan sql code meegeven met het formulier.  Watch out with serial, identity, auto increment 23.6 Incorrectly filtered escape characters  Fout: input is niet gefilterd op escape characters 23.7 Incorrect type handling  Fout: types van de input worden niet gecheckt 23.8 Oplossingen  Escape character verwijderen uit de invoervelden  Controleren of het invoerveld wel het juiste type heeft  Prepared statements  Stored procedures - Type - ; en escaping - Grants.. - Dicht bij de bron - .. 23.9 Opgepast  Enkel Escaping is niet voldoende:  Dus zeg eerder wat wel mag zijn als invoer, ipv wat niet mag; het eerste is eenvoudiger, er zijn (meestal) maar een eindig aantal mogelijkheden. 24Embedded SQL = SQL binnen een host language 24.1 Hoe?  Host-language herkent SQL niet en geeft fouten => precompileren  Precompiler (afhankelijk van product) :  identificeert de SQL-instucties in het programma  vertaalt de SQL-instructies naar de host-language  controleert de syntax van de SQL-instructies  controleert of de gebruikte tabellen/kolommen bestaan  controleert de bevoegdheden  bepaalt de verwerkingsstrategie  voert de SQL-instructies uit 25Transacties en multi-user gebruik Single – user multiple-user  Wat als meerderen tegelijk dezelfde gegevens willen gebruiken 25.1 Transacties = verzameling SQL-instructies die door één gebruiker ingevoerd wordt en waarvan de mutaties blijvend moeten zijn of ongedaan moeten worden. Autocommit:  Elke SQL-instructie is een transactie  Elke transactie is permanent commit: permanent maken van een transactie Rollback: ongedaan maken van een transactie Transactie: vanaf begin tot een commit of rollback Laatste: steeds commit of rollback Wanneer zinvol?  Als een bepaald gegeven uit meerdere tabellen geschrapt moet worden  Als gebruiker zich vergist heeft bij aanpassingen Mogelijke uitzonderingen: instructies die de catalogus wijzigen 25.2 Hoe? Inpliecete start bv na ROLLBACK of COMMIT Cf autocommit Explicite start  begin; sql code; commit ;  begin; sql code; rollback;  start transaction; sql code; commit ;  start transaction; sql code; rollback; 25.3 Savepoint = maken een deel van een actuele transactie ongedaan. Vb Update … insert … savepoint S1 insert … savepoint S2 delete … rollback work to savepoint S2 … 25.4 Problemen multi-user gebruik Dirty read (uncommitted read) : een gebruiker leest een gegeven dat nooit gecommit werd Nonrepeatable – nonreproducible read : Een gebruiker leest voor en na de commit andere gegevens (gegevens worden gewijzigd) Phantom read : een gebruiker leest voor en na de commit andere gegevens (er komen nieuwe gegevens) Lost update : Een wijziging van één gebruiker wordt overschreven door een andere gebruiker 25.5 Oplossing Oplossing : Transacties serieel verwerken ! Oplossing indien honderden gebruikers tegelijk willen werken Transacties parallel verwerken ! 25.6 Lock table..  Locking :  de rij waar één gebruiker mee werkt wordt gelocked voor de andere gebruikers  als transactie afgelopen is, wordt de blokkade opgeheven  Locking gebeurt in de buffer (eg RAM)  Verschillende opties voor granulariteit en rechten (bv SHARE vs EXCLUSIVE) 25.7 Deadlocks  Cf operatings systems  Deadlock : o indien twee of meerdere gebruikers op elkaar wachten  Oplossing : o indien deadlock aanwezig, dan wordt één transactie afgebroken 25.8 Transacties: ISOLATION LEVEL  Isolation level : mate van isolatie van gebruikers  Niveaus:  Serializable : maximaal gescheiden  Repeatable read :  lezen : share blokkades (stopt bij einde transactie)  muteren : exclusive blokkades  Cursor stability (read committed) :  lezen : share blokkades (stopt bij einde select)  muteren : exclusive blokkades  Dirty read (read uncommitted) :  lezen : share blokkades (stopt bij einde select)  muteren : exclusive blokkades (stopt bij einde mutatie)  Tabel boek 25.9 Gevolgen  Serializable :  concurrency is het laagst  Snelheid laagst  Dirty read :  concurrency is hoog, moeten weinig op elkaar wachten  Kunnen gegevens lezen die enkele momenten later niet meer bestaan Vb. Set transaction isolation level serializable 26Procedurele transacties 26.1 Stored procedures = hoeveelheid code die opgeslagen is in de catalogus van een DB en die geactiveerd kan worden door deze aan te roepen vanuit een programma, een trigger, of een andere stored procedure. Stored procedures maken het mogelijk om bepaalde delen van een programma centraal in de catalogus van een database server op te slaan. Hier zijn ze dan vanuit alle programma’s aanroepbaar. Vb. Create procedure delete_wedstrijden (in p_spelersnr integer) begin delete from wedstrijden where spelersnr = p_spelersnr ; end Call delete_wedstrijden (8) ; verwerking:  Vanuit programma wordt procedure opgeroepen  DBMS ontvangt oproep en zoekt procedure  Procedure wordt uitgevoerd waarbij de instructies op de database verwerkt worden  M.b.v. code wordt aangegeven of procedurecorrect verwerkt is (sqlcode) 26.2 Parameters  Communicatie met buitenwereld  3 soorten :  Invoerparameters  Uitvoerparameters  Invoer/uitvoerparameters  Parameter best andere naam dan kolom !!! 26.3 Body  Uit te voeren instructies  BEGIN … END; : samengestelde instructie  Alle mogelijke SQL-instructies  Label : Vb. BLOK1 : BEGIN BLOK2 : BEGIN BLOK3 : BEGIN END BLOK1; END BLOK2; END BLOK3; 26.4 Lokale veriabelen  Vasthouden van tijdelijke tussenresultaten  DECLARE CURSOR noodzakelijk 26.5 SET-INSTRUCTIE Toekennen van een waarde aan een lokale variabele. VB: set var1=1; 26.6 Flow-control instructies Mogenlijkheden:  IF … THEN … ELSEIF … THEN … END IF  IF … THEN … ELSE … END IF  CASE WHEN … WHEN … ELSE … END CASE;  WHILE … DO … END WHILE ;  REPEAT … UNTIL … END REPEAT;  LOOP… END LOOP; 26.7 Aanroepen van stored procedures CALL-instructie Mogelijkheden :  Programma  Interactief SQL  Stored procedure  Recursieve oproep van een stored procedure 26.8 SELECT INTO Indien gegarandeerd maximaal 1 rij! Vb. create procedure som_boetes_speler (in p_spelersnr integer, out som_boetes decimal(8,2)) begin select sum(bedrag) into som_boetes from boetes where spelersnr = p_spelersnr; end call som_boetes_speler (27, @som) select @som 26.9 Foutboodschappen, handlers, conditions  Foutboodschappen o SQL-error-code: beschrijvende tekst o SQLSTATE: code  DECLARE HANDLER: SQL stopt verwerking niet!!  3 soorten: o Continue o Exit o Undo 26.10 Stored procedures met een cursor Indien resultaat uit meerdere rijen bestaat 26.11 Stored procedures en transacties Stored procedure analoog aan SQL-instructies  Commit  Rollback  Start transaction 26.12 Stored procedures en catalogus ROUTINES: tabel in catalogus 26.13 Verwijderen stored procedures DROP PROCEDURE: verwijdert procedures Vb. Drop procedure delete_spelere 26.14 Compileren en hercompileren Twee tabellen met zelfde naam gaat als ze verschillende eigenaren hebben. With recompile: compiler wordt steeds opnieuw opgeroepen. De verwerkingsstrategie voor de procedure wordt steeds opnieuw aan de actuele situatie van de db aangepast. Nadeel: hercompileren kost tijd.  Wat met tabellen met dezelfde naam maar verschillende eigenaar ?  Afhankelijk van het moment van compilatie  Soms : bij creatie van de procedure  Soms : bij uitvoeren van de procedure  Soms : kan men kiezen Vb. Create procedure delete_wedstrijden_2 (snr_var in smallint) as with recompile Begin … End 26.15 Beveiliging met stored procedures  GRANT EXECUTE : beveiliging  Onderliggende machtigingen nodig ?  eigenaar van de procedure wel  gebruiker van de procedure niet Vb. grant execute on delete_wedstrijden to John 26.16 Voordelen van stored procedures  Onderhoudbaarheid: vb aantal verschillende mutaties samen  Verwerkingssnelheid: minimaliseert netwerkverkeer  Precompilatie bij stored procedures  Oproepen vanuit verschillende host-languages 26.17 Stored function = Stukken code bestaande uit SQL- en procedurele instructies, opgeslagen in de catalogus Maar:  Geen uitvoerparameters mogelijk  Oproep via allerlei expressies  Return noodzakelijk Vb. create function dollars (bedrag decimal(7,2)) returns decimal(7,2) begin return bedrag * (1 / 0,08) ; end select betalingsnr, bedrag, dollars(bedrag) from boetes 26.18 Verwijderen stored functions DROP FUNCTION: verwijdert function Vb: drop function delete_speler 26.19 Triggers = hoeveelheid code die opgeslagen is in de catalogus die geactiveerd wordt door het dbms indien een bepaalde operatie wordt uitgevoerd en een conditie waar is. Deze worden het dbms zelf automatisch opgeroepen(niet door vb. een call). 3 DELEN: - Trigger-event + trigger-moment o Wanneer activeren?  AFTER: nadat triggering instructie is verwerkt  BEFORE: eerst de trigger-actie  INSTEAD OF: alleen de trigger-actie o Voor welke rij ac

"edocr

Samenvatting gemaakt door Simon Cek en Niels Vermeiren

×

Modal Header

Modal body