0% found this document useful (0 votes)
49 views33 pages

Data Manipulation

The document discusses database transaction management in SQL. It describes how Data Manipulation Language (DML) commands like INSERT, UPDATE, and DELETE are used to add, modify, and remove rows in database tables. These commands are executed as part of transactions, which ensure that related data changes are all committed or rolled back together to maintain data integrity. The COMMIT command finalizes changes to the database, while ROLLBACK cancels changes made during a transaction.

Uploaded by

amirkaracic8427
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views33 pages

Data Manipulation

The document discusses database transaction management in SQL. It describes how Data Manipulation Language (DML) commands like INSERT, UPDATE, and DELETE are used to add, modify, and remove rows in database tables. These commands are executed as part of transactions, which ensure that related data changes are all committed or rolled back together to maintain data integrity. The COMMIT command finalizes changes to the database, while ROLLBACK cancels changes made during a transaction.

Uploaded by

amirkaracic8427
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 33

Manipulisanje sa podacima

Ciljevi
• Poslije kompletiranja ove lekcije trebalo bi
se biti u mogućnosti da:
– Da se opiše svaka DML naredba
– Ubaci (insertuje) red u tabelu
– Ažurira/ju red/ovi u tabeli
– Briše/u red/ovi iz tabele
– Kontroliše transakcija
DML – Data Manipulation
Language
• DML naredbe se izvršavaju kada:
– Dodajete novi red u tabelu
– Modifikujete postojeće redove u tabeli
– Brišete postojeće redove iz tabele
• Transakcija se sastoji od kolekcije DML
naredbi koje predstavljaju logičku jedinicu
rada
Dodavanje novog reda u tabelu
Novi red
60 IT - SEKTOR 2400
Dodavanje
DEPARTMENTS (insertovanje novog
Dep. Dep.Name Loc.ID sloga u tabelu)
NO
10 Administration 1700
20 Marketing 1800
DEPARTMENTS
30 Purchasing 1700
Dep. Dep.Name Loc.ID
40 Human Res. 2400
NO
10 Administration 1700
20 Marketing 1800
30 Purchasing 1700
40 Human Res. 2400
60 IT – SEKTOR 2400
Sintaksa INSERT naredbe
• Dodavanje novog reda u tabelu koristeći INSERT
naredbu
• Samo jedan red se ubacuje na ovaj način!
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);

• Ubacivanje novog reda koji ima vrijednosti za svaku


kolonu
• Lista vrijednosti u default poretku kolona u tabeli
• Opcionalna, lista kolona u INSERT naredbi
• Karakterni i podaci tipa datum se pišu u navodnicima
SQL> INSERT INTO deptments (deptment_id,
department_name, manager_id, location_id)
2 VALUES (50, ‘IT - SEKTOR', 100, 2400);
1 row created.
Ubacivanje redova sa NULL
vrijednostima
• Implicitni metod: Izostavljanje kolona iz
liste kolona
SQL> INSERT INTO departments (deptment_id,
department_name )
2 VALUES (65, 'MIS');
1 row created.

• Eksplicitna metoda: Navođenje NULL


vrijednosti u VALUES dijelu komande
SQL> INSERT INTO departments
2 VALUES (70, 'FINANCE', NULL, NULL );
1 row created.
Ubacivanje specijalnih vrijednosti
• SYSDATE je funkcija koja vraća tekući
datum i vrijeme
• USER je funkcija koja vraća korisničko ime
SQL> INSERT INTO employees (employee_id, first_name,
2 last_name, email, phone_number,
3 hire_date, job_id, salary,
4 commission_pct, manager_id,
5 department_id)
6 VALUES (113, USER,
7 'Popp', 'LPOPP', '515.124.4567',
8 SYSDATE, 'AC_ACCOUNT', 6900,
9 NULL, 205,
10 100);

1 row created.
Ubacivanje datumskih vrijednosti
• Datumske vrijednosti se unose putem funkcije
TO_DATE
• Format ‘dd.mm.yyyy’ označava:
• dd – 2 cifre dana u mjesecu (01 - 31)
• mm – 2 cifre za mjeserc (01 - 12)
• yyyy – 4 cifre za godinu (0000 - 9999)

SQL> INSERT INTO employees (employee_id, first_name,


2 last_name, email, phone_number,
3 hire_date, job_id, salary,
4 commission_pct, manager_id,
5 department_id)
6 VALUES (114, ‘Bird’,
7 ‘Phenix', 'LPOPP', '515.124.4567',
8 to_date(’03.02.1980’, ‘dd.mm.yyyy’), ‘IT', 6900,
9 NULL, 205,
10 100);

1 row created.
Ubacivanje vrijednosti korištenjem
zamjenskih varijabli
• Kreiranje interkativne skripte za korištenje
zamjenskih parametara
SQL> INSERT INTO deptmenents (deptment_id,
2 department_name, location_id)
3 VALUES (&department_id,
4 '&department_name', '&location');

Enter value for department_id: 80


Enter value for department_name: EDUCATION
Enter value for location: 2400

1 row created.
Kreiranje skripte sa prilagođenim
nazivima za unos
• ACCEPT - pohranjuje vrijednosti u varijable
• PROMPT – prikazuje prilagođeni tekst
ACCEPT department_id PROMPT ‘Unesite sifru
odjela:'
ACCEPT department_name PROMPT ‘Unesite naziv
odjela:'
ACCEPT location PROMPT ‘Unesite lokaciju kojoj
odjel pripada:'
INSERT INTO deptartments (department_id,
department_name, loc)
VALUES (&department_id, '&department_name',
'&location');
Kopiranje slogova iz drugih tabela
• Kopiranje vrijednosti iz drugih tabela
putem SQL iskaza
• Ne koristi se VALUES klauzula
• Broj kolona u insertu mora odgovarati broju
kolona u SELECT klauzuli
SQL> INSERT INTO managers(id, name, salary, hiredate)
2 SELECT empno, ename, sal, hiredate
3 FROM emp
4 WHERE job = 'MANAGER';
3 rows created.
Ažuriranje podataka u tabeli
UPDATE (ažuriranje
DEPARTMENTS podataka u tabeli)
Dep. Dep.Name Loc.ID
NO
10 Administration 1700
20 Marketing 1800
DEPARTMENTS
30 Purchasing 1700
Dep. Dep.Name Loc.ID
40 Human Res. 2400
NO
50 IT 2400
10 Administration 1700
20 Marketing 1800
30 Purchasing 1700
40 Human Res. 2400
50 IT – SEKTOR 2400
Sintaksa UPDATE naredbe
• Ažuriranje postojećih podataka u tabeli koristeći
UPDATE naredbu
• Svi redovi se ažuriraju kada ne postoji WHERE klauzula
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];

• Za ažuriranje samo odgovarajućih redova, kojim se


dodjeljuje odgovarajuća vrijednost za kolunu/kolone
tabele, koristi se WHERE klauzula
• Obavezno se mora navesti lista kolona u UPDATE
naredbi
• Karakterni i podaci tipa datum se pišu u navodnicima
SQL> UPDATE employees
2 SET last_name = ‘Phenix’
3 WHERE employee_id = 102;
1 row updated.
Ažuriranje redova
• Integrity constraint error – nastaje kada se
mijenjaju vrijednosti koji nisu u opsegu
dozvoljenih vrijednosti za navedenu kolonu
SQL> UPDATE employees
2 SET department_id = 57
3 WHERE deptno = 10;

UPDATE employees
*
ERROR at line 1:
ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK)
violated - parent key not found
Brisanje redova iz tabele
DELETE (brisanje
DEPARTMENTS podataka iz tabele)
Dep. Dep.Name Loc.ID
NO
10 Administration 1700
20 Marketing 1800
DEPARTMENTS
30 Purchasing 1700
Dep. Dep.Name Loc.ID
40 Human Res. 2400
NO
50 IT 2400
10 Administration 1700
20 Marketing 1800
30 Purchasing 1700
40 Human Res. 2400
Sintaksa DELETE naredbe
• Brisanje postojećih podataka u tabeli koristeći
DELETE naredbu
• Svi redovi se brišu kada ne postoji WHERE klauzula
SQL> DELETE FROM departments;
27 rows deleted.

• Za brisanje samo odgovarajućih redova, koristi se


WHERE klauzula
SQL> DELETE FROM departments
2 WHERE department_name = 'DEVELOPMENT';
1 row deleted.
Brisanje redova
• Integrity constraint error – greška koja se
pojavljuje kada se pokušava brisati red u tabeli u
kojoj je primarni ključ referenca na neku drugu
tabelu. Npr. department_id iz tabele
DEPARTMENTS je referenca za department_id u
tabeli EMPLOYEES.

SQL> DELETE FROM departments


2 WHERE department_id = 10;

DELETE FROM departments


*
ERROR at line 1:
ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK)
violated - child record found
Transakcije baze podataka
• Sadrži jedan od sljedećih izraza:
– DML izrazi prave jednu konzistentnu promjenu
podataka
– DDL (Data Definition Language) izraz - je SQL
komanda koja omogućava kreiranje (create),
mijenjanje (alter), i/ili brisanje objekata u bazi
podataka sa komandama kao što su CREATE TABLE,
DROP TABLE, ALTER TABLE, itd
– DCL (Data Control Language) izraz - je SQL komanda
koja omogućava spašavanje, vraćanje i/ili vraćanje
stanja baze podataka nakon neke upotrebe DML SQL
komande nad podacima u bazi od/do početka prijave
na bazu podatala. Tu su komande COMMIT,
ROLLBACK, SAVEPOINT
Transakcije baze podataka
• Počinje sa izvršenjem prvog izvršivog SQL
iskaza
• Završava sa jednim od sljedećih događaja:
– Pozivom COMMIT ili ROLLBACK naredbe
– Izvršenjem DDL ili DCL naredbi (automatski
COMMIT)
– Korisničkim izlaskom iz sistema
– Kraširanjem sistema (baze podataka)
Prednosti COMMIT i ROLLBACK
iskaza
• Osiguravaju konzistentnost podataka
• Pregled promjene podataka prije trajne
promjene podataka u bazi podataka
• Grupiše logički povezane operacije
Kontrola transkacije
Transaction

INSERT UPDATE INSERT DELETE

COMMIT Savepoint A Savepoint B

ROLLBACK to Savepoint B

ROLLBACK to Savepoint A

ROLLBACK
Implicitna obrada transakcija
• Automatski COMMIT se događa za jednu
do sljedećih okolnosti:
– DDL (Data Definition Language) izraz
– DCL (Data Control Language) izraz
– Normal izlaz iz SQL * Plus, bez
izričitog izdavanja COMMIT ili ROLLBACK
• Automatski ROLLBACK se događa kod
abnormalnog prestanka rada aplikacije
(npr. SQLTools) ili kvara sistema
Stanje podataka prije COMMIT i
ROLLBACK naredbi
• Prethodno stanje podataka moguće je vratiti
na početno stanje (ROLLBACK)
• Trenutni korisnik koji je napravio promjene
može pregledati rezultate promjena DML
naredbi putem SQL iskaza
• Drugi korisnici ne mogu vidjeti promjene
DML naredbi koje je izvršio trenutni korisnik
• Izmijenjeni redovi ne mogu se mijenjati od
strane drugih korisnika, sve dok trenutni
korisnik ne prihavati ili odbije trajno
prihvatiti načinjene promjene u bazi podataka
Stanje podataka poslije COMMIT
naredbe
• Promjene nad podacima se trajno mijenjaju
u bazi podataka
• Prethodno stanje podataka je trajno
izgubljeno
• Svi korisnici vide izvršene promjene nad
podacima
• Zaključani redovi se otključavaju i postaju
dostupni drugim korisnicima za promjenu
• Svi prethodno postavljeni SAVEPOINT-i se
brišu iz transkacije
Trajno prihvatanje izvršenih
promjena nad podacima
• Pravljene promjene nad podacima
SQL> UPDATE employees
2 SET department_id = 10
3 WHERE last_name = ‘Phenix’;
1 row updated.

• Trajno prihvatanje promjena - COMMIT


SQL> COMMIT;
Commit complete.
Stanje podataka poslije ROLLBACK
naredbe
• Odbacuju se sve promjene koje su u fazi
čekanja na trajno prihvatanje
– Poništavaju se sve promjene nastale nad podacima
– Vraćene su sve vrijednosti podataka na prethodno
stanje (prije nastale promjene)
– Zaključani redovi se otključavaju i proglašavaju
dostupnim za druge korisnike sistema
SQL> DELETE FROM employees;
107 rows deleted.
SQL> ROLLBACK;
Rollback complete.
Poništavanje promjena do
odgovarajućeg markera
• Kreiranje markera za trenutnu transkaciju
uz pomoć SAVEPOINT naredbe
• Poništavanje svih nastalih promjena do
markera – SAVEPOINT naredbe
SQL> UPDATE...
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO update_done;
Rollback complete.
Nivoi rollback naredbe
• Ako je došlo do greške prilikom izvođenja
jednog DML onda će se vršiti vraćanje
podataka samo za taj DML
• Sve druge promjene ostaju osim one DML
naredbe koja je imala grešku prilikom
izvršavanja
• Korisnik može eksplicitno prekinuti tok
izvođenja DML naredbi putem COMMIT ili
ROLLBACK naredbe
Konzistentnost čitanja podataka
• Konzistentnost čitanja podataka garantuje
mogućnost čitanja podataka u svakom
vremenskom trenutku
• Promjene načinjene od strane jednog korisnika
nisu u konfliktu sa promjenama načinjenim od
strane drugog korisnika
• Konzistentnost čitanja osigurava da je nad
istim podacima moguće da:
– Osoba koja samo čita podatke ne čeka na osobu
koja mijenja te iste podatke
– Osoba koja mijenja podatke ne čeka na osobu koja
samo čita podatke
Implementacija konzistentnosti
čitanja podataka u bazi podataka
BAZA PODATAKA

UPDATE employees Blokovi


SET salary = 2000 podataka
WHERE last_name =
'SCOTT';
Rollback
segmenti
Korisnik A
Promijenjeni i
SELECT * nepromijenjen
FROM employees; Slika i podaci
konzisten.
čitanja Prije
promjene
“old” podaci
Korisnik B
Zaključavanje - ORACLE
• Spriječavanje destruktivnih interakcija između
trenutnih transakcija
• Ne zahtijeva se akcija od strane korisnika
• Automatki se koristi najniža razina
restriktivnosti
• Zaključavanje nastaje tokom trajanja
transakcije
• Postoje dva osnovna načina zaključavanja:
– Ekskluzivni i
– Dijeljeni
Kratak pregled

Izraz Opis
INSERT Dodavanje novih redova u tabelu
UPDATE Modifikacija postojećih slogova u tabeli
DELETE Brisanje postojećih redova iz tabele
COMMIT Trajno prihvatanje svih nastalih promjena nad podacima
SAVEPOINT Omogućava ROLLBACK na SAVEPOINT marker
ROLLBACK Odbacije sve nastale promjene nad podacima
Manipulisanje sa podacima

You might also like