1. SQL DML (Data Manipulation Language) 2. Lägga till data. 4. Uppdatera data 5. Aktivera default value 6. Hantera datum 7.

Relevanta dokument
1. SQL DDL (Data Definition Language) 2. Skapa tabell

1. PLSQL 2 2. Select into

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

1.Lär känna MS SQL Observera. Tips. Förberedelse

9. :new och :old -värden 10. Triggerns olika delar 11. Olika typer av triggrar 12. Kodexempel. Pär Douhan,

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

9. Between 10. Group by 11. Aggregatfunktionerna max, min, sum och avg 12. Nästlade sökningar

2. Objekt, operatorer och integritetsregler 3. Databasobjekt

Structured query language (SQL)

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

1. SQL 2. Utsökningar mot flera tabeller. 4. IN-operatorn 5. Join 6. Kartesisk produkt 7. Tabellalias

TENTAMEN DATABASKUNSKAP ITEK12

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Starta MySQL Query Browser

ADO.NET Murach Kapitel 17-20

Transaktioner. 1. Transaktioner 2. Samtidighet ( concurrency ) och lås. 3. Deadlock. Kap. 17. Informatik B: Databashantering med SQL Server

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

Övningar i SQL. SQLAccess.doc Ove Lundgren

ÖVERVAKNING AV SQL SERVER

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

1. Kvalitetsbegreppet 2. Kommunikation 4. Olika typer av datalagring. 5. Databas 6. DBMS 7. Molntjänster 8. Tabeller. 10. SQL 11.

Föreläsning 6 Databaser och säkerhet

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

Databaser och. SQL, utsökningar mot flera tabeller TENTA. # radnr (#) studnr (#) kursnr * tentadatum * betyg

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Stored procedure i ASP.NET

För att XCOPY i SQL Server Express ska fungera måste data och logg ligga i samma mapp, vilket naturligtvis inte är så bra.

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

Databasutveckling Introduktion till SQL och TSQL

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Databaser och. SQL, utsökningar mot en tabell

Föreläsning 7: Transaktioner

INTRODUKTION TILL JDBC

Innehåll Programability Del 2

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Det finns även möjlighet att göra "Java - kopplingar" mot DB2 enligt diverse standarder som ODBC, SQLj mm.

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Klientprogrammering mot databaser

D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ;

Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för:

Stored procedure i ASP.NET

Trafla databasen vi hämtar data från (remote export) ligger på en godtycklig maskin i nätverket. Den här databasen är en MIMER databas.

Vyer, Prepared Statements, Triggers

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

2. Säkerhet 3. Autentisering. 5. Dataintegritet 6. Data privacy 7. PuL 8. Personuppgifter 9. Säkerhetspolicy. Pär Douhan,

Lösningar till tentamen i EDAF75

Disposition. 1. Kopplingen mellan Processanalys (DFDdiagram) 2. Treskikts Client-Server arkitektur (Fig 1.8) 3. Data layer

Transaktioner och samtidighet

SQL, nästlade delfrågor Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.

Design och underhåll av databaser

Sample exam questions. Database exam TIG058

Databaser och Datamodellering Foreläsning IV

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

732G16: Databaser - Design och programmering

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

Introduktion MySQL och MariaDB

Skapa exempeldatabasen

FÖ 13: Databaskursen. Pär Douhan,

INNEHÅLL. Historik Vad är SQL Språkuppbyggnad SELECT Operatorer Logiska/Jämförelse SELECT med Alias och JOIN INSERT UPDATE DELETE

Tentamen i Databasteknik

DVA234 Databaser. Dag Nyström, Introduktion till databaser och MS SQL Server

Funktionsbeskrivning

Introduktion till DB2 v7.2 för Windows 2000

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

INNEHÅLL. Konfigurering av SQL Server. Egenskaper Kommunikationsprotokoll

Webbservrar, severskript & webbproduktion

Databaser - Design och programmering

9. Anonyma block 10. Clean code och läsbarhet 11. Variabeltyper och variabeldeklaration 12. Olika loopar: Basic, while och for loop

Vad är en databas? Databasutveckling Med MySQL/MariaDB

Föreläsning 2: Översikt över ett databassystem

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

Tentamen för DD1370 Databasteknik och informationssystem

WCMS-15, Webbutvecklare CMS

Version 1.0. Benämning OSG Storage Engine. Senaste revidering Användarbeskrivning

Introduktion till frågespråket SQL (v0.91)

Tentamen etjänster och webbprogrammering

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Nya webbservern Dvwebb.mah.se

2. Redundans 3. Normalformer

MySQL - testmiljöer på minuter. Thomas Johansson IT-avdelningen

KAP 16 BACKUP, RESTORE OCH RECOVERY

Analytisk relationsdatabasdesign

Introduktion till DB2 v7.2 för Windows 2000

Databasutveckling Tabeller. tinyint 1 byte (0-255) Upp till 8 bytes

I denna laboration skriver jag inte ut resultatet på de flesta frågorna utan du kör dem själv i din miljö.

Administrationsmanual ImageBank 2

Databaser design och programmering. Transaktionshantering och säkerhet säkerhetsproblem fleranvändarproblem transaktioner låsning

Funktionsbeskrivning

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

Transkript:

FÖ 5: Databaskursen 1 1. SQL DML (Data Manipulation Language) 2. Lägga till data 3. Kopiera tabell 4. Uppdatera data 5. Aktivera default value 6. Hantera datum 7. Ta bort data 8. SQL TCL (Transaction Control Language) 9. Samtidighet 10. Databastransaktion 11. Commit och rollback 12. Sessioner 13. ACID properties 14. Lås Pär Douhan, pdo@du.se

SQL - DML Vi börjar med SQL - DML 2

SQL DML Förkortningen DML står för Data Manipulation Language Används när vi ska lägga till, uppdatera eller ta bort dt data från få en tabell. Vi påverkar alltså innehållet i tabeller med DML. TABELL kolumn1 kolumn2 kolumn3 1. Lägga till: insert 2. Uppdatera: update 3. Ta bort: delete Tabellen innehåller data i form av rader. Det är raderna vi skapar, uppdaterar och tar bort med DML. 3

Fylla på data När vi ska fylla på en databastabell med data kan vi göra det på lite olika sätt. Här kommer några exempel: 1. Lägga till nya rader med insert 2. Fylla på en tabell med data från en annan tabell 3. Fylla på en tabell eller flera tabeller med data från en extern fil 4

Datafångst t Webbläsaren är ett vanligt gränssnitt för att lägga in ny data. Ofta kommer data som matas in i databasen från olika typer av webbformulär. Detta sker om du t. ex. lägger in en annons på Blocket eller gör ett besök hos din internetbank och betalar räkningar eller så besvarar du kanske en webbenkät. Innehållet i ditt webbformulär skickas k till webbservern som via olika drivrutiner ODBC, OLEDB eller kanske JDBC tillsammans med PHP,.NET eller JSP ansluter till databasen och exekverar en SQL-sats som lägger in, i detta exempel, annonsens data i databasen. I andra fall kanske data kommer från andra databaser i form av XML-filer eller vanliga textfiler (CSV-filer). Datan i dessa filer kan laddas in i databasen med olika verktyg, t. ex. Oracle SQL Loader. Excel-filer är en annan vanlig källa för data. Datainnehållet i excel-filer går också att ladda in en databas, ofta exporterar man innehållet i excel-filen till en s.k. csv-fil, som är en vanlig textfil, innan man laddar in data i databasen. 5

SQL Loader DB ETL, ExtractTransform Load Data XML CSV EXCEL LOG SQL Loader Data DB 6

Lägga till data med insert KUND # knr * persnr * fnamn * enamn * regdatum KUND knr persnr fnamn enamn regdatum 1 840315-7415 Erik Ek 20170101 2 870201-5510 arman ikovic 20170101 3 745022 karin ander 20170101 insert into kund(knr,persnr,fnamn,enamn,regdatum) values(seq_knr.nextval,'840315-7415','erik','ek',sysdate); insert into kund(knr,persnr,fnamn,enamn,regdatum) enamn regdatum) values(seq_knr.nextval,'870201-5510','arman','ikovic',sysdate); insert into kund(knr,persnr,fnamn,enamn,regdatum) enamn regdatum) values(seq_knr.nextval,750610-5588,'karin','ander',sysdate); 7 Om vi glömmer fnuttar ' ' runt persnr, så kommer Oracle att ta 750610 minus 5588 och typomvandla till varchar2

Hämta data från en annan tabell BIL # regnr * färg * märke * modell o hk Data SPORTBIL # regnr * färg * märke * modell o hk Uppgift: Fyll på tabellen Sportbil med data från tabell Bil. insert into sportbil(regnr,färg,märke,modell,hk) select regnr,färg,märke,modell,hk from bil; Eller så här (* står för alla kolumner): insert into sportbil select * from bil; 8

Kopiera en tabell med eller utan data BIL # regnr * färg * märke * modell o hk SPORTBIL # regnr * färg * märke * modell o hk Uppgift: Skapa tabellen Sportbilar som en kopia av tabellen Bilar. Ta bara med bilobjekt som har mer än 400 hk. create table sportbil as select * from bilar where hk > 400; Tabellen Sportbil skapas som en kopia av tabellen Bil. Data och not null constraints följer med. Det som inte följer med är: create table bil2 as select * from bil where 3 = 4; Tabellen Bil2 skapas som en kopia av tabellen Bil. OBS! Ingen data följer med. Detta då villkoret: 3 = 4 aldrig blir sant. 9 PK, FK, Check och Unique

Uppdatera en rad KUND # knr * persnr * fnamn * enamn * regdatum KUND knr persnr fnamn enamn regdatum 1 840315-7415 Erik Ek 20170101 2 870201-5510 arman ikovic 20170101 3 745022 750610-5588 karin ander 20170101 Uppgift: Rätta till det felaktiga personnumret från tidigare exempel. Vi gör detta genom att uppdatera cellen som innehåller persnr 745022 för kund med knr = 3. update kund set persnr = '750610-5588' where knr = 3; 10 Detta kallas för en singleton update. Detta då det bara är en rad som påverkas.

Aktivera default value KUND Hur gör vi för att aktivera default value till kolumnen regdatum? # knr * persnr * fnamn * enamn * regdatum Deklarerad som: regdatum date default sysdate not null, Om vi utelämnar kolumnen regdatum i vår insert-sats, så kommer Oracle att aktivera default value för kolumnen. insert into kund(knr,persnr,fnamn,enamn) values(seq q_ knr.nextval,'721111-5542','rolf','ek');,, 11

Lägga in datum KUND # knr * persnr * fnamn * enamn * regdatum KUNDORDER # id (#) knr * orderdatum * levdatum Vi lägger till en rad i tabellen Kundorder. Orderdatum är sysdate och levdatum blir om 4 dagar. Hur gör vi? insert into kundorder(id,knr,orderdatum,levdatum) values(seq_radnr.nextval,'2559',sysdate,sysdate + 4); date + number = date 12

Lägga in datum Studera! insert into kundorder(id,knr,orderdatum,levdatum) values(x.nextval,3,sysdate,to_date('2018-10-28','yyyy-mm-dd')); l t t d t ('2018 10 28' 'YYYY orderdatum = 2018-10-24:14:30:01 levdatum = 2018-10-28:00:00:0010 28 00 00 00 Varför? insert into tabell(id,knr,orderdatum,levdatum) values(x.nextval,3,sysdate,to_date('2018-10-28:14:10','yyyy-mm-dd:hh24:mi')); 13 Vi måste sätta finkornigheten själva med hjälp av önskad formatmask för datumsträngen.

Uppdatera flera rader ARTIKEL # artnr * artnamn * lagerplats * lagerantal * pris Det kommer att bli en stor mellandagsrea. Vi ska därför sänka priset på alla våra artiklar med 30%. update artikel set pris = (pris * 0.7); Om vi inte har något where-villkor, så kommer alla rader att påverkas. update artikel set pris = (pris * 0.7) where lagerantal < 20; Om vi har ett where-villkor som inte inkluderar en primärnyckel eller annan kolumn som är unik, så kan vi påverka en eller flera rader med vår SQL-sats. 14

Uppdatera flera kolumner KUND # knr * persnr * fnamn * enamn * adress * postnr * ort * email * regdatum En kund loggar in på sitt konto för att uppdatera sina kunduppgifter med sin nya adress. Följande SQL-sats måste exekveras för att uppgifterna ska ändras: update kund set adress = 'Hemgatan 12', postnr = 84523, ort = 'Mora' where knr = 12568; 15

Ta bort en rad KUND # knr * persnr * fnamn * enamn * regdatum KUNDORDER # id (#) knr * orderdatum * levdatum Vi vill ta bort kund med knr = 3 från tabellen kund: delete from kund where knr = 3; Error at line 1: ORA-02292: brott mot integr.begränsning (TEST.KUNDORDER_KNR_FK) - underordnad post påträffad. Kunden äger en eller flera kundordrar. Referensintegriteten FK ser till att detta stoppas. 16

Tömma tabellerna på data KUND # knr * persnr * fnamn * enamn * regdatum KUNDORDER # id (#) knr * orderdatum * levdatum Om vi vill tömma bägge tabellerna på data gör vi följande: delete from kundorder; delete from kund; commit; Töm tabellerna i rätt ordning. Avsluta alla lyckade transaktioner med commit! 17

Labbrapport Hur redovisa labben? 18

Läsbar kod är viktigt! t! create table KUND ( persnr varchar2(11), username varchar2(12) not null, passwd varchar2(12) not null, fnamn varchar2(40) not null, enamn varchar2(60) not null, kredittyp varchar2 (12) not null, telnr varchar2(14) ); Vilken kod är mest lättläst? kredittyp varchar2 (12) not null Borde vara denna :) create table KUND ( persnr varchar2(11), username varchar2(12) not null, passwd varchar2(12) not null, fnamn varchar2(40) not null, enamn varchar2(60) not null, kredittyp varchar2 (12) not null, telnr varchar2(14) ); create table KUND ( persnr varchar2(11), username varchar2(12) not null, passwd varchar2(12) not null, fnamn varchar2(40) not null, enamn varchar2(60) not null, kredittyp varchar2 (12) not null, telnr varchar2(14) ); 19

Gruppera det som hör ihop Skriv en välstrukturerad, tydlig och lättläst labbrapport! Uppgift x: Skapa tabeller -- Tabell KUND -- create table kund( knr number(6), fnamn varchar2(50) not null, kredittyp varchar2(5)); alter table kund add constraint kund_kr_pk primary key(knr) add constraint kund_kreditvärdighet_ck check(kredittyp in('hög','medel','låg')); -- Tabell KUNDORDER -- Definitioner -- Tabell x -- Definitioner 20

SQL - TCL Vi fortsätter med SQL - TCL 21

SQL DML Förkortningen TCL står för Transaction Control Language Används när vi ska påverka effekterna av en transaktion (T). En T skapas av DML, d.v.s. när vi gör insert, update eller delete mot en tabell. TABELL kolumn1 kolumn2 kolumn3 1. Spara effekter av T: commit 2. Ångra effekter av T: rollback När vi påverkar datainnehållet i en tabell med DML, så skapas en transaktion. En T kommer alltid att förändra datainnehållet i tabellen. 22

Samtidighet t Klienter Webbserver och klient till databasen Databas Alla klienter är inloggade mot samma schema i olika unika sessioner. 23

Ansluta till en databasserver UNIK session Klient user- 5 process serverprocess 4 Server user/passwd@host 2 3 listenerprocess 1 1. Listener-process lyssnar efter anrop över nätverket 2. Klienten startar ett program och loggar in. Detta skapar en user-process hos klienten 3. Anropet noteras av listener-process 4. En server-process startar på databasservern. Denna server-process kommunicerar sedan med Oracle Instance (DBMS). 5. User-process kommunicerar med server-process under resten av den unika sessionens längd 24

"Köra en fråga" 1 select fnamn,enamn from kund order by fnamn asc; user- server- process 3 resultat process 2 "Köra en fråga" går i tre steg: 1. PARSE: user-process skickar SQL-satsen till server-process och begär kompilering. Oracle Instance utför kompilering, i och returnerar status: t success eller failure 2. EXECUTE: Oracle Instance hämtar data från datafiler eller data base buffer cache 3. FETCH: server-process returnerar resultatet från tabellen kund, sorterat på fnamn till userprocess 25

Olika sessioner user = H18ABCDE sid,serial# = 9,244 sid,serial# = 13,12847 userprocess userprocess serverprocess serverprocess Ibland kan en session "låsa sig" och måste då "dödas": alter system kill session 'session-id,session-serial' select sid serial# from v$session where username = 'H18ABCDE'; Ovanstående kommando "dödar"" specifik select sid,serial# session. Vi hittar session-id och session-serial parametrarna i v$session view (kolumnerna sid and serial#). Dvs D.v.s. i data dictionary. alter system kill session '9,2444' 26 SID SERIAL# ------ ---------- 9 2444 13 12847

ACID-Properties En databastransaktion eller transaktion, ki i fortsättningen refererad till som T. En T ska uppfylla egenskaperna som kallas ACID properties: p Atomicity En T är en logisk enhet av arbete som måste utföras i sin helhet, eller inte alls Consistency En lyckad T tar databasen från ett konsistent tillstånd till nästa, d.v.s. en T förändrar datainnehållet i databasen Isolation Effekterna av Tx är inte synliga för andra Tn, förrän Tx har gjort commit Durability När en T har gjort commit är effekterna av den permanenta i databasen 27

Commit och rollback Commit och rollback En T involverar en eller fler SQL DMLsatser, som insert, update eller delete En T avslutas med commit för att göra effekterna av T permanenta (spara) En T avslutas med rollback för att göra effekterna av T ogjorda (ångra) 28

Logisk enhet (atomicity) it update personal set lön = lön - 3000 where anstnr = 120; update kontor set ktyp = 'källare' where anstnr = 120; update parkering set ptyp = 'ej_tak' where anstnr = 120; tid = x commit; eller rollback; T = logisk enhet av arbete. Sänk lön, byt kontor och byt parkering. Kräver tre deltransaktioner. Under tiden x, som går efter det att T är klar och inte commit eller rollback utförts, så finns värdena innan effekterna av T lagrade i rollback segment eller som det heter fr.o.m. Oracle 9i: undo segment. 29

Lås KUND user = h18abcde session x update kund set fnamn = 'bosse' where knr = 1;.. tid = x. commit; eller rollback; user = h18abcde session y sse undo segment (old image) DML: update och delete genererar undo dt! data! 30 DML-lås (new image) Låst data är bara synligt i session x! Låsen släpper vid commit eller rollback, och effekerna blir synliga i alla sessioner. Kör följande SQL under tiden x: select fnamn from kund where knr = 1; Vad ser session y?

Integritetsproblem t The lost update problem En transaktion T1 skriver över en annan transaktion T2:s förändringar T1 tid T2 saldo fetch(saldo) 100 1 100 update(saldo) 1000 2 3 4 5 6 fetch(saldo) 100 update(saldo) 400 100 100 1000 400 400 Saldot skulle ha varit 100 + 900 + 300 = 1300, T2 skriver över T1. Lösning = lås! T2 skulle inte fått läsa saldo förrän vid tid = 4. 31

Olika låstyper Integritetsproblem av typen the lost update problem, kan undvikas genom en teknik som kallas låsning. Vi antar att databasen stödjer två olika typer av lås: 1. X-lock (exlusive locks = skrivlås) 2. S-lock (shared locks = läslås) T2 vill ha X S AndraT har X N N S N Y N = no = nej Y = yes = ja 32 Y Y

The End 33