open source s istem za upravljanje bazama podataka
Download
Skip this Video
Download Presentation
Open source s istem za upravljanje bazama podataka

Loading in 2 Seconds...

play fullscreen
1 / 75

Open source s istem za upravljanje bazama podataka - PowerPoint PPT Presentation


  • 108 Views
  • Uploaded on

Open source s istem za upravljanje bazama podataka. M ySQL je veoma brz i robus t an sistem za upravljanje relacionim bazama podataka.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Open source s istem za upravljanje bazama podataka' - colin-dickson


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
open source s istem za upravljanje bazama podataka
Open source

sistem za upravljanje bazama podataka

slide2
MySQLje veoma brz i robustan sistem za upravljanje relacionim bazama podataka.
  • Server upravlja pristupom podacima, pri tome omogućuje da s njima radi više korisnika istovremeno i da pristup podacima bude brz i dozvoljen samo ovlašćenim korisnicima.
  • MySQL je na raspolaganju korisnicima od 1996. godine. Do sada je više puta dobijao nagradu "Reader\'s Choice Award" u svojoj kategoriji.
ta je to to m ysql ini tako posebnim
Šta je to štoMySQLčini tako posebnim ?
  • MySQLje Open Source RSUBP.
    • Dostupan je na Internetu i pri tome je besplatan.
    • može se preuzeti i koristiti prema GPL licenci.
    • Cena za komercijalnu upotrebu i podršku su niski.

Ovo je veliki kontrast drugim komercijalnim sistemima za baze podataka (kao što su Oracle, MS SQL, Informix i sl.), kreiranih od strane velikih kompanija, koji su pri tome veoma skupi.

ta je to to mysql ini tako posebnim
Šta je to štoMySQLčini tako posebnim ?
  • Tehnička podrška. MySQLje jedan od retkih open source projekata iza kojih stoje konkretne firme (MySQL AB) koja isključivo radi na održavanju i razvoju tog proizvoda.

Uz to, postoji ogroman broj korisnika koji direktno utiču na razvoj.

ta je to to m ysql ini tako posebnim1
Šta je to štoMySQLčini tako posebnim ?
  • Brzina i stabilnost. Svaki od sistema za baze podataka ima oblasti u kojima se posebno ističe. Jedna od ovih oblasti je brzina - široko je priznato da su odgovori ovog RDBMS u rangu sa najbržim sistemima.
  • Upravo zbog brzine, MySQL često predstavlja izbor za internet aplikacije, gde se zbog velikog saobraćaja zahteva velika brzina odziva.
ta je to to m ysql ini tako posebnim2
Šta je to štoMySQLčini tako posebnim ?
  • Funkcionalnost.MySQLnudi mnoštvo opcija koje odlikuju „velike” RSUBP kao što su:
    • podrška za ANSI SQL, kao i postojanje sopstvene ekstenzije
    • online backup,
    • replikacija,
    • podrška za SSL (Secure Sockets Layer),
    • integracija u skoro sva razvojna okruženja.
ta je to to m ysql ini tako posebnim3
Šta je to štoMySQLčini tako posebnim ?
  • Lakoća upotrebe.
    • Distribucija MySQL-aje relativno mali paket, koji ne zahteva stotine i stotine megabajta kao drugi SUBP.
    • Razvojna filozofija ovog sistema fokusirana je na široku i laku upotrebljivost, gde se u paket ubacuju samo neophodne funkcije. Ovo ga čini relativno lakim za razumevanje, za instaliranje, podešavanje i administraciju.
ta je to to m ysql ini tako posebnim4
Šta je to štoMySQLčini tako posebnim ?
  • Portabilnost. MySQL može da se pokrene na brojnim paltformama, a najvažnije su UNIX, Linux i Windows.
ta je to to m ysql ini tako posebnim5
Šta je to štoMySQLčini tako posebnim ?
  • Rapidni razvoj. MySQL od verzije 5.0 uključuje podršku za:
    • transakcije,
    • replikaciju,
    • tekstualno pretraživanje i
    • RAID fajl-sisteme.
    • Trigere (okidače)
    • uskladištene procedure (stored procedures)
ta je to to m ysql ini tako posebnim6
Šta je to štoMySQLčini tako posebnim ?
  • Interoperabilnost.
    • može da se koristi u kombinaciji sa velikim brojem drugog softvera, bilo open source ili komercijalnog.
    • Ove alatke vam omogućavaju da na lak način iskoristite sve mogućnosti baza podataka.
ta je to to m ysql ini tako posebnim7
Šta je to štoMySQLčini tako posebnim ?
  • Programibilnost.
    • Ukoliko postojeći softver ne odgovara vašim potrebama, možete kreirati sopstveni.
    • Dostupni su interfejsi za veliki broj programskih jezika, kao što su:
      • C,
      • C++,
      • Perl,
      • PHP,
      • Python,
      • Java,
      • Ruby, itd.
ta je to to m ysql ini tako posebnim8
Šta je to štoMySQLčini tako posebnim ?
  • Saradnja sa najvećim proizvođačem poslovnog softvera SAP – om na maxDB-u značajno utiče i na kvalitet osnovnog proizvoda
  • Uz sve prethodno navedeno, ne čudi što se MySQLrazvija brže od rivalskih proizvoda i što lista korisnika komercijalne verzije ovog sistema za upravljanje bazama podataka izgleda ovako:
tipovi podataka u mysql u
Tipovi podataka uMySQL-u
  • Numerički tipovi podataka
    • NUMERIC ili DECIMAL (sinonim je DEC)
      • Čuvanje vrednosti sa pokretnim zarezom
      • Obično se koriste za rad sa novčanim vrednostima
      • Opseg vrednosti jednak je kao za brojeve s pokretnim zarezom dvostruke tačnosti
    • INTEGERi varijante
      • Standardni tip za celobrojne vrednosti
      • Smešta se u 4 bajta, što daje 232 vrednosti
      • Varijante:
        • TINYINT zauzima jedan bajt (28 mogućih vrednosti). Sinonim je

BIT

        • SMALLINT zauzima dva bajta (216 mogućih vrednosti).
        • MEDIUMINT zauzima tri bajta (224 mogućih vrednosti).
        • BIGINT zauzima osam bajtova (264 mogućih vrednosti).
    • FLOAT, namenjen za rad s brojevima s pokretnim zarezom jednostruke tačnosti.
    • DOUBLE, namenjen za rad s brojevima s pokretnim zarezom dvostruke tačnosti.
      • Sininimi za ovaj tip su REAL i DOUBLE PRECISION
tipovi podataka u mysql u1
Tipovi podataka uMySQL-u
  • Znakovni i tekstualni tipovi podataka
    • CHAR
      • Čuvanje znakovnih vrednosti fiksne dužine
      • Maksimalna dužina podatka tipa CHAR je 255 znakova
    • VARCHAR
      • Čuvanje znakovnih vrednosti promenljive dužine
      • Maksimalna dužina podatka tipa VARCHAR je 255 znakova
    • TEXT i njegove varijante
      • TEXT– za skladištenje tekstualnih podatka dužih od 255 znakova
      • Varijante
        • TINYTEXT može sadržati najviše 255 (28-1) znakova ili bajtova
        • TEXTmože sadržati najviše 65535 (216-1) znakova ili bajtova (64 KB)
        • MEDIUMTEXT može sadržati najviše 224-1 znakova ili bajtova (16 MB)
        • LONGTEXT može sadržati najviše 232-1 znakova ili bajtova (4 GB)
tipovi podataka u mysql u2
Tipovi podataka uMySQL-u
  • Znakovni i tekstualni tipovi podataka (nastavak)
    • ENUM
      • omogućava zadavanje liste mogućih vrednosti. Polje ovog tipa može sadržati jednu vrednost iz nabrojanog skupa mogućih.
      • Tip podataka ENUM deklariše se na sledeći način:

Pol enum(‘m’, ’z’)

Pošto vrednost tipa ENUM može biti i NULL, moguće vrednosti polja pol su m,z,NULL il error

    • SET
      • Sličan tipu ENUM s tom razlikom što polja mogu sadržati i više vrednosti iz nabrojanog skupa mogućih
tipovi podataka u mysql u3
Tipovi podataka uMySQL-u
  • Datumski i vremenski tipovi podataka
    • DATE
      • Čuvanje datuma u ISO redosledu godina-mesec-dan
      • Datumi se prikazuju u formatu GGGG-MM-DD
    • TIME
      • Čuvanje podataka koji predstavljaju vreme
      • Prikazuju se u formatu ČČ:MM:SS
    • DATETIME
      • Čuvanje datuma i vremena u formatu godina-mesec-dan ČČ:MM:SS
    • TIMESTAMP
      • Ako u određenom redu zadate vrednost NULL u polje se upisuje vreme kada je red dodat tabeli ili kada je red poslednji put izmenjen
    • YEAR
      • Čuvanje podataka koji predstavljaju godine.
      • Moguće je zadati YEAR(2) ili YEAR(4), podrazumevano je YEAR(4)
      • YEAR(2) predstavlja opseg godina od 1970 do 2069.
kreiranje baza podataka tabela i indeksa u mysql u
Kreiranje baza podataka, tabela i indeksa u MySQL-u

Razlikovanje malih i velikih slova uMySQL-u

  • U rezervisanim rečima SQL jezika ne pravi se razlika između upotrebe malih i velikih slova. To je standardno u svim RDBMS.
  • Da li će MySQL praviti razliku između malih i velikih slova u imenima baza podataka i tabela zavisi od operativnog sistema pod kojim radite.

Savet: definisati sopstveni standard koji treba dosledno primenjivati radi izbegavanja moguće konfuzije.

  • U MySQL-u se u imenima kolona, indeksa i alijasa nikada ne pravi razlika između malih i velikih slova.
kreiranje baza podataka tabela i indeksa u mysql u1
Kreiranje baza podataka, tabela i indeksa u MySQL-u
  • Kreiranje baza podataka

create database zaposleni;

    • Da je ova komanda uspešno izvršena, možete proveriti ako zadate komandu:

show databases;

  • Biranje baze podataka
    • Pre kreiranja tabela ili bilo kakvih drugih promena u našoj bazi, potrebno je da naglasimo da ćemo sve promene raditi u bazi koja ima naziv “zaposleni”

use zaposleni ;

    • Sada je izabrana (otvorena) baza podataka zaposleni i za sve akcije koje izvršimo podrazumevaće se da se odnose na tu bazu podataka.
kreiranje baza podataka tabela i indeksa u mysql u2
Kreiranje baza podataka, tabela i indeksa u MySQL-u
  • Kreiranje tabela

CREATE TABLEnazivtabele (definicije kolona tabele) [TYPE=tip_tabele];

Ili puni oblik:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] ime_tabele

[(definicija_kolone,…)]

[opcije_za_tabelu] [komanda select]

Primer:

create table odeljenje

(odeljenje int not null auto_increment primary key,

naziv varchar(30)

) type=InnoDB;

kreiranje baza podataka tabela i indeksa u mysql u3
Kreiranje baza podataka, tabela i indeksa u MySQL-u
      • Kreiranje indeksa

Primer:

CREATE INDEX ime ON zaposleni(ime);

  • Indeksi definisani nad kolonama tipa char I varchar mogu se ograničiti na prvih nekoliko znakova u polju.

CREATE INDEX parcijalno_imeON zaposleni(ime(5));

kreiranje baza podataka tabela i indeksa u mysql u4
Kreiranje baza podataka, tabela i indeksa u MySQL-u
      • Brisanje baza podataka, tabela i indeksa
  • Brisanje baze podataka

DROP DATABASE [IF EXISTS] naziv_baze;

  • Brisanje tabela

DROP TABLE [IF EXISTS] naziv_tabele [,naziv_tabele, …]

  • Brisanje indeksa

DROP INDEX naziv_indeksa ON naziv_tabele;

kreiranje baza podataka tabela i indeksa u mysql u5
Kreiranje baza podataka, tabela i indeksa u MySQL-u
      • Izmena strukture postojeće tabele
  • Primer za kreiranje indeksa:

ALTER TABLE zaposleni

ADD INDEX ime (ime);

  • Opšti oblik komande:

ALTER [IGNORE] TABLE ime_tabele vrsta_izmene[, vrsta_izmene,…]

Vrste_izmene:

ADD [COLUMN] definicija_kolone [FIRST | AFTER ime_kolone]

Ili ADD [COLUMN] (definicija_kolone, definicija_kolone,…)

MODIFY [COLUMN] definicija_kolone [FIRST | AFTER ime_kolone]

DROP [COLUMN] ime_kolone

Ili DROP PRIMARY KEY

unos brisanje i a uriranje podataka u mysql u
Unos, brisanje i ažuriranje podataka u MySQL-u

Komanda INSERT

INSERT [INTO]naziv_tabele VALUES

(vrednost_1, vrednost_2,…),

(vrednost_n, vrednost_n+1,…),

(vrednost_k, vrednost_k+1,…),

ili

INSERT [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…)]

VALUES (izraz |DEFAULT, …),)…),…

ON DUPLICATE KEY UPDATE ime_kolone=izraz, …]

unos brisanje i a uriranje podataka u mysql u1
Unos, brisanje i ažuriranje podataka u MySQL-u

Komanda INSERT(nastavak)

ili

INSERT [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…)]

SELECT …

Ili

INSERT [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…)]

SET ime_kolone = (izraz |DEFAULT), …

ON DUPLICATE KEY UPDATE ime_kolone=izraz, …]

unos brisanje i a uriranje podataka u mysql u2
Unos, brisanje i ažuriranje podataka u MySQL-u

Komanda INSERT(nastavak)

  • Neobavezne odredbe:
    • LOW PRIORITY, kojom se zadaje da se komanda INSERT izvršava sa niskim prioritetom, s tim što se blokira klijentski program za unos podataka.
    • DELAYED, kojom se zadaje da se izvršavanje odloži, omogućava izvršavanje drugog upita, s tim što če predhodni upis biti obavljen tek kada je tabela slobodna

Obe opcije čine da se upisivanje podataka u tabelu odloži dom više ne bude ni jednog klijenta koji pokušava da učita podatke iz tabele.

    • Opcija ON DUPLICATE KEY UPDATE pruža rešenje problema dupliranog primarnog ključa ili duplirane jedinstvene vrednosti. Iza ove opcija sledi naredba UPDATE koja menja postojeću vrednost u koloni.
unos brisanje i a uriranje podataka u mysql u3
Unos, brisanje i ažuriranje podataka u MySQL-u

Komanda REPLACE

  • Slično deluje kao i komanda INSRT, s tom razlikom što ako dođe do dupliranja ključa, novi red koji želite da upišete zamenjuje posojeći red.

REPLACE [LOW_PRIORITY |DELAYED]

[INTO] ime_tabele [(ime_kolone,…)] VALUES (izraz,…),(…),…

ili

REPLACE [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…)]

SELECT …

ili

REPLACE [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…)]

SET ime_kolone = (izraz |DEFAULT), …

unos brisanje i a uriranje podataka u mysql u4
Unos, brisanje i ažuriranje podataka u MySQL-u

Komanda DELETE

  • Omogu’ava brisanje redova iz tabele.
  • Primer:

DELETE FROM odeljenje;

  • Op[ti oblik ove komande je:

DELETE [LOW_PRIORITY] [QUICK] FROM ime_tabele

[WHERE uslov]

[ORDER BY …]

[LIMIT broj_redova]

Ili

DELETE [LOW_PRIORITY] [QUICK] ime_tabele[, ime_tabele…]

FROM reference_na_tabele

[WHERE uslov]

unos brisanje i a uriranje podataka u mysql u5
Unos, brisanje i ažuriranje podataka u MySQL-u

Komanda DELETE (nastavak)

Ili

DELETE [LOW_PRIORITY] [QUICK]

FROM ime_tabele[, ime_tabele…]

USING reference_na_tabele

[WHERE uslov]

unos brisanje i a uriranje podataka u mysql u6
Unos, brisanje i ažuriranje podataka u MySQL-u

Komanda TRUNCATE

  • Omogu’ava brisanje svih redova iz tabele.
  • Brza je od naredbe DELETE
  • Primer:

TRUNCATE TABLE zaposleni;

unos brisanje i a uriranje podataka u mysql u7
Unos, brisanje i ažuriranje podataka u MySQL-u

Komanda UPDATE

  • Omogućava ažuriranje postojećih redova u tabelama.

Primer:

UPDATE zaposleni

SET posao=‘DBA’

WHERE zaposleni=6651

Naredba UPDATE ima sledeći oblik:

UPDATE ime_tabele

SET ime_kolone1=izraz1 [,ime_kolone2 = izraz2…]

[WHERE uslov]

[ORDER BY …]

[LIMIT broj_redova]

unos brisanje i a uriranje podataka u mysql u8
Unos, brisanje i ažuriranje podataka u MySQL-u

Grupno unošenje podataka pomoću komande LOAD DATA INFILE

  • Datoteka Odeljenje.txt

42 Finansije

128 istrazivanje i razvoj

NULL Ljudski resursi

NULL Marketing

Datoteka je u standardnom formatu za primenu naredbe LOAD DATA INFILE,

Sto znači da se svaki red podataka nalazi u posebnom redu datoteke, a kolone su razdvojene znakom za tabulator.

Primer:

LOAD DATA LOCAL INFILE ‘odeljenje.txt’INTO TABLE odeljenje;

unos brisanje i a uriranje podataka u mysql u9
Unos, brisanje i ažuriranje podataka u MySQL-u

Grupno unošenje podataka pomoću komande LOAD DATA INFILE nastavak

  • Datoteka novi_programeri.csv

Julia, programer, 128

Douglas, programer, 128

Tim, programer, 128

Primer:

LOAD DATA LOCAL INFILE ‘e:\\novi_programeri.csv’

INTO TABLE zaposleni

FIELDS TERMINATED BY ‘,’ /* obavezno mora da se naznaci */

LINES TERMINATED BY ‘/n’ /* nije neophodno */

IGNORE 2 LINES /* posto su prva dva reda zaglavlje treba ih preskociti */

(ime,posao,odeljenje); /* posto datoteka ne sadrzi sifre zaposlenih moramo

naznačiti u koja polja (i kojim redosledom) želimo da prenesemo podatke */

napredne mogu nosti mysql a
Napredne mogućnostiMySQL-a
  • Transakcije
  • Pogledi (Views)
  • Uskladištene procedure (Stored procedures)
  • Funkcije
  • Trigeri
transakcije u mysql u
Transakcije u MySQL-u
  • Transakcija označava skup SQL komandi koji se izvršavaju kao nedeljiva celina.
  • Ako su sve SQL komande koje čine transakciju uspešno izvršene onda je transakcija izvršena, u suprotnom se ne sme ništa uraditi.Ovaj koncept je poznat kao nedeljivost (atomicity).
  • Klasični primer je iz bankarskog okruženja: Određeni novčani iznos treba prebaciti sa računa jedne osobe na račun druge osobe:

UPDATE racun SET saldo=saldo-500 WHERE vlasnik = “Zoran”;

UPDATE racun SET saldo=saldo+500 WHERE vlasnik = “Dragan”;

Oba SQL upita moraju biti izvršena ili nijedan.

Oba upita čine transakciju.

transakcije u mysql u1
Transakcije u MySQL-u
  • Transakcione baze moraju obezbediti 4 osobine koje se skraćeno nazivajuACID:
  • Atomicity (nedeljivost)Iskaz se sastoji od nekoliko logičnih celina - skupa upita. Ili su svi upiti izvršeni uspešno ili nijedan od njih.
  • Consistency (usklađenost)Baza je u koezistentnom stanju pre i posle transakcije. Svaka operacija nad podacima prebacuje bazu podataka iz jednog ispravnog stanja u drugo. Ne sme biti “međustanja” u kojima podaci nisu potpuno usklađeni.
  • Isolation (izolovanost)Transakcija nema efekat na druge procese. To znači da efekti pojedinačnih upita u transakciji nisu vidljivi drugim klijentima sve dok se transakcija uspešno ne izvrši (commit iskazom).
  • Durability (trajnost)Kada je transakcija uspešno obavljena njeni efekti su permanentni.
transakcije u mysql u2
Transakcije u MySQL-u

Preduslov: korišćenje transaction-safe storage engine (mašina za skladištenje podataka kao što su InnoDB, BDB ili NDB Cluster),

START TRANSACTION, COMMIT i ROLLBACK

START TRANSACTION | BEGIN [WORK]

COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]

ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET AUTOCOMMIT = {0 | 1}

transakcije u mysql u3
Transakcije u MySQL-u
  • START TRANSACTIONiBEGIN naredbaoznačavaju početak nove transakcije.
  • COMMITpotvrđuje tekuću transakciju, čineći promene nastale tom transakcijom stalnim.
  • ROLLBACKponištava tekuću transakciju, otkazujući sve promene koje su o okviru nje izvršene.
  • Naredba SET AUTOCOMMIT uključuje ili isključuje autocommit mod za aktivnu konekciju
transakcije u mysql u4
Transakcije u MySQL-u
  • Predefinisano je da MySQL radi sa uključenim autocommit modom. To znači da čim izvršite SQL naredbu koja ažurira neku tabelu,MySQLpromenu zapisuje u bazi.
  • Ako koristite transaction-safe storage engine (kao što su InnoDB, BDB ili NDB Cluster),možete isključiti autocommit mod na sledeći način:

SET AUTOCOMMIT=0;

Napomena:ako isključite automatsko potvrđivanje transakcija nije neophodno izričito zadati komandu START TRANSACTION da biste započeli transakciju.

transakcije u mysql u5
Transakcije u MySQL-u

create table test(

ime char(20) not null unique);

start transaction;

insert into test(ime) values(“Jovan”);

insert into test(ime) values(“Petar”);

commit;

transakcije u mysql u6
Transakcije u MySQL-u
  • start transaction koristimo za početak transakcije.
  • Nakon uspešno izvršena 2 upita koristili smocommitza kraj transakcije, koja je u ovom slučaju uspešno obavljena.
  • Važno je da nijedna od promena tokomtransakcije (unošenje novog imena Petar) nije vidljiva drugim klijentima sve dok se ne izvrši commit. To je osobinaizolovanosti.
transakcije u mysql u7
Transakcije u MySQL-u
  • Primer neuspele transakcije:

set autocommit=0;

start transaction;

insert into test(ime) values(”Lazar”);

insert into test(ime) values(“Jovan”);

rollback;

  • Tokom transakcije došlo je do greške, jer smo pokušali da unesemo već postojeću vrednost (Jovan) u polje definisano kao jedinstveno (unique).
  • Kao rezultat došlo je do greške, pa smo izvršili rollback iskaz.
  • Tabela sadrži iste slogove kao i pre početka transakcije, tj. ime Lazar koje je prvo uneto na početku transakcije nije ostalo upisano jer transakcija u celini nije uspela.
transakcije u mysql u8
Transakcije u MySQL-u
  • Počev od verzijeMySQL4.1.1 moguće je snimiti tačku u transakciji (savepoint) na koju se možemo vratiti rollback-om.

Primer:

set autocommit=0;

start transaction;

insert into test(ime) values(\'Lazar\');

savepoint tacka1;

insert into test(ime) values(\'Mirko\');

rollback to savepoint tacka1;

insert into test(ime) values(\'Dragan\');

commit;

  • Nakon unosa prvog imena (Lazar) snimili smo poziciju u transakciji kao tacka1. Unos imena Mirko je poništen vraćanjem na tačku1, nakon koje smo uneli uspešno ime Dragan i odradili commit.
  • Na kraju transakcije, vidi se da ime Mirko nije uneto jer smo se vratili na tačku u transakciji gde to ime nije postojalo.
transakcije u mysql u9
Transakcije u MySQL-u

Naredbe na koje ROLLBACK nema efekta

su DDL naredbe, kao što su:

  • CREATE ili DROP DATABASE,
  • CREATE, ALTER ili DROP TABLE ili
  • CREATE, ALTER ili DROP PROCEDURE

I zbog toga ih ne treba koristiti u transakcijama.

pogledi views u mysql u
Pogledi (Views) u MySQL-u
  • Pogledi su virtuelne tabele koje nastaju kao rezultat SQL upita nad jednom ili više tabela.
  • Oni fizički ne postoje.
  • Pogledi predstavljaju jednostavan metod smeštanja SQL naredbe ubazu podataka.
  • Uvedeni su u MySQL u verziji 5.0.1

Kreiranje pogleda

CREATE VIEWview_nameAS SELECTcolumn_list...FROMtable_name;

pogledi views u mysql u1
Pogledi (Views) u MySQL-u
  • Kreiranjem pogleda se ne pravi kopija postojećih podatka iz tabele ili tabela koje su učestvovale u kreiranju pogleda, već je to samo memorisanje SQL komande.
  • Pogled je po svemu ravnopravan sa ostalim tabelama baze podataka:
    • mogu se pisati upiti koji se odnose na jedno ili više polja pogleda
    • Mogu se u okviru upita povezivati sa ostalim tabelama baze podataka
pogledi views u mysql u2
Pogledi (Views) u MySQL-u
  • Ažuriranje podataka korišćenjem pogleda
    • Ograničenja prilikom ažuriranja:
      • za ažuriranje podataka ne mogu biti korišćeni pogledi koji sadrže sledeće SQL klauzule :
        • UNION
        • DISTINCT i DISTINCTROW
        • HAVING i GROUP BY klauzule
  • Brisanje podataka korišćenjem pogleda
    • Ograničenja prilikom brisanja:
      • Za brisanje podataka se mogu koristiti isključivo pogledi kreirani nad jednom tabelom.
  • Brisanje pogleda

DROP VIEW [IF EXISTS]view_name;

uskladi tene procedure u mysql u
Uskladištene procedure u MySQL-u

Uskladištena procedura (stored procedure) je procedura (potprogram ili metod u programskim jezicima) koja je smeštena u bazi podataka.

MySQL podržava dve vrste ovakvih procedura:

  • uskladištene procedure koje ne vraćaju vrednost
  • funkcije koje vraćaju vrednosti na isti način kao i funkcije ugrađene u MySQL.
  • Uskladištena procedura ima naziv, listu parametara i sadrži jednu ili više SQL naredbi
uskladi tene procedure u mysql u1
Uskladištene procedure u MySQL-u
  • Zašto se koriste ?
  • Iako predstavljaju novu mogućnost u okviru MySQL-a, odavno postoje u ostalim RDBMS
  • Uskladištene procedure su brze. Efekat brzine se postiže pre svega kroz smanjenje mrežnog saobraćaja.
  • Naročito su pogodne za ponavljajuće zadatke koji zahtevaju proveru, iteraciju, sa malo ili bez interakcije sa korisnikom
  • Ako promenite jezik za pristup bazi podataka ne bi trebalo da bude problema jer je logika u bazi podataka a ne aplikaciji.
  • Sintaksa uskladištenih procedura MySQL-a je bliska SQL:2003 standardu, tako da se lako mogu primeniti i na drugim RDBMS
uskladi tene procedure u mysql u2
Uskladištene procedure u MySQL-u

Važno !!!

S obzirom da su uskladištene procedure uvedene u verziji 5, neophodno je prvo proveriti koja verzija je instalirana na računaru, da biste bili sigurni da ih uopšte možete koristiti.

show variables like \'version\';

Ili

SELECT VERSION();

uskladi tene procedure u mysql u3
Uskladištene procedure u MySQL-u
  • Kreiranje pomoću MySQL Query Browser-a

Opcija Script > Create Stored Procedure / Function

Ili

desni klik u prozoru Shemata i izbor opcije

Create Stored Procedure / Function

uskladi tene procedure u mysql u4
Uskladištene procedure u MySQL-u

Primer :

DELIMITER $$

DROP PROCEDURE IF EXISTS `zaposleni`.`SP_proba` $$

CREATE PROCEDURE `SP_proba`()

BEGIN

select * from zaposleni; telo procedure (glavni blok)

END $$

DELIMITER ;

uskladi tene procedure u mysql u5
Uskladištene procedure u MySQL-u

Pozivanje uskladištene procedure :

call SP_proba();

uskladi tene procedure u mysql u6
Uskladištene procedure u MySQL-u
  • Naziv uskladištene procedure nije case senzitivan.
  • U jednoj bazi sve uskladištene procedure moraju imati različite nazive, što znači da preklapanje (overloading) procedura nije moguće
  • Naziv uskladištene procedure može sadržati maksimalno 64 znaka uključujući i praznine (space)
uskladi tene procedure u mysql u7
Uskladištene procedure u MySQL-u

Koje MySQL naredbe su dozvoljene u telu uskladištene procedure ?

  • INSERT
  • UPDATE
  • DELETE
  • SELECT
  • DROP
  • CREATE
  • REPLACE
uskladi tene procedure u mysql u8
Uskladištene procedure u MySQL-u

Koje MySQL naredbe su dozvoljene u telu uskladištene procedure ?

  • Bilo koja SQL DML naredba.
  • Primer:

DELIMITER $$

DROP PROCEDURE IF EXISTS `zaposleni`.`SP_brisanje_statusa` $$

CREATE PROCEDURE `zaposleni`.`SP_brisanje_statusa` ()

BEGIN

DELETE FROM status;

END $$

DELIMITER ;

uskladi tene procedure u mysql u9
Uskladištene procedure u MySQL-u

Koje MySQL naredbe su dozvoljene u telu uskladištene procedure ?

  • Bilo koja SQL DDL naredba.
  • Primer:

DELIMITER $$

DROP PROCEDURE IF EXISTS `zaposleni`.`SP_brisanje_tabele_status` $$

CREATE PROCEDURE `zaposleni`.`SP_brisanje_tabele_status` ()

BEGIN

DROP TABLE status;

END $$

DELIMITER ;

uskladi tene procedure u mysql u10
Uskladištene procedure u MySQL-u

Koje MySQL naredbe nisu dozvoljene u telu uskladištene procedure ?

  • Naredbe koje manipulišu uskladištenim rutinama (procedurama i funkcijama)
    • CREATE PROCEDURE / CREATE FUNCTION
    • ALTER PROCEDURE / ALTER FUNCTION
    • DELETE PROCEDURE / DELETE FUNCTION
    • CREATE TRIGGER
    • ALTER TRIGGER
    • DELETE TRIGGER
  • Naredba USE
uskladi tene procedure u mysql u11
Uskladištene procedure u MySQL-u

Parametri

In

DELIMITER $$

DROP PROCEDURE IF EXISTS `zaposleni`.`SP_parametar_in` $$

CREATE PROCEDURE `zaposleni`.`SP_parametar_in` (in p int)

BEGIN

SELECT * FROM zaposleni WHERE zaposleni_id= p;

END $$

DELIMITER ;

Primena:

uskladi tene procedure u mysql u12
Uskladištene procedure u MySQL-u

Uslovni izrazi (IF THEN ELSE)

Primer :

DELIMITER $$

DROP PROCEDURE IF EXISTS `zaposleni`.`SP_primer_if` $$

CREATE PROCEDURE `SP_primer_if`(in parametar int)

BEGIN

declare promenljiva int;

set promenljiva = parametar + 1;

if promenljiva = 0 then

INSERT INTO t VALUES (17,17);

end if;

if parametar = 0 then

UPDATE t

SET broj = 0, zbir = 0

WHERE broj = parameter;

end if;

END $$

DELIMITER ;

uskladi tene procedure u mysql u13
Uskladištene procedure u MySQL-u

Naredba CASE

Primer :

DELIMITER $$

DROP PROCEDURE IF EXISTS `zaposleni`.`SP_primer_case` $$

CREATE PROCEDURE `SP_primer_case`(in parametar int)

BEGIN

declare v1 int;

set v1 = parametar + 1;

case v1

when 0 then INSERT INTO t(broj) VALUES (17);

when 1 then INSERT INTO t(broj) VALUES (18);

else insert into t(broj) values (19);

end case;

END $$

DELIMITER ;

uskladi tene procedure u mysql u14
Uskladištene procedure u MySQL-u

Petlje (WHILE … END WHILE)

Primer :

DELIMITER $$

DROP PROCEDURE IF EXISTS `zaposleni`.`SP_primer_while_petlja` $$

CREATE PROCEDURE `SP_primer_while_petlja`()

BEGIN

declare brojac int;

set brojac = 0;

while brojac <= 5 do

INSERT INTO t(broj) VALUES (brojac);

set brojac = brojac + 1;

end while;

END $$

DELIMITER ;

uskladi tene procedure u mysql u15
Uskladištene procedure u MySQL-u
  • Primer:

DELIMITER $$

DROP PROCEDURE IF EXISTS `zaposleni`.`SP_klijent` $$ /* brisanje procedure */

CREATE PROCEDURE `SP_klijent`(in klijent integer) /* naziv proc. i lista parametara */

BEGIN /* pocetak bloka */

DECLARE promenljiva CHAR(10); /* deklarisanje promenljivih*/

IF klijent = 17 THEN /* pocetak IF naredbe */

SET promenljiva = ‘Tom\'; /* naredba dodeljivanja */

ELSE

SET promenljiva = ‘Tim\'; /* naredba dodeljivanja */

END IF;/* kraj IF naredbe */

INSERT INTO klijent(klijent,ime,adresa,kontaktOsoba,kontaktTelefon) VALUES (klijent,promenljiva,null,null,null); /* SQL naredba */

END $$

DELIMITER ;

funkcije u mysql u
Funkcije u MySQL-u
  • Funkcije su programi koji
    • kada se pozovu vraćaju vrednost,
    • moraju uvek da vrate vrednost,
    • uvek vraćaju samo jednu vrednost.
  • Mogu biti pozvane iz SQL naredbe.
  • Ograničenje

Funkcije ne mogu da pristupe tabelama baze podataka !

funkcije u mysql u1
Funkcije u MySQL-u
  • Primer:

DELIMITER $$

DROP FUNCTION IF EXISTS `zaposleni`.`F_IF` $$

CREATE FUNCTION `F_IF`(parametar VARCHAR(10)) RETURNS varchar(10)

BEGIN

declare izlaz VARCHAR(10) default "Nije A";

if parametar = "A" then

set izlaz := "Jeste A";

end if;

return izlaz;

END $$

DELIMITER ;

trigeri u mysql u
Trigeri u MySQL-u
  • Šta su trigeri ?

Trigeri su objekti (uskladištene procedure) pridruženi tabeli, koji se automatski aktiviraju kada se desi neki događaj vezan za tu tabelu.

  • Uvedeni su u verziji 5.02 Alpha

Mogu se uspešno koristiti za validaciju podataka i druge operacije direktno nad tabelama baze podataka.

  • Kada se trigeri aktiviraju ?

Trigeri se aktiviraju kada se desi neka promena u pridruženoj tabeli, preciznije prilikom izvršenja Insert / Update / Delete naredbi.

trigeri u mysql u1
Trigeri u MySQL-u
  • Trigeri ne mogu biti korišćeni u SELECT naredbi na isti način kao procedura ili funkcija.
  • Kreiranje trigera – sintaksa

CREATE TRIGGER naziv_trigera

vreme_izvršavanja_trigera

događaj

ON tbl_name

FOR EACH ROW trigger_stmt

trigeri u mysql u2
Trigeri u MySQL-u

Vreme izvršavanja trigera:

  • BEFORE
  • AFTER

Događaj

je ona akcija čije izvršavanje na pridruženoj tabeli uzrokuje aktiviranje trigera. Može biti:

  • INSERT
  • UPDATE
  • DELETE
trigeri u mysql u3
Trigeri u MySQL-u

Primer :Validacija vrednosti polja

CREATE TABLE test (id INT, sum DECIMAL(10,2));

DELIMITER $$

CREATE TRIGGER insert_trig

BEFORE INSERT ON test

FOR EACH ROW

BEGIN

IF new.sum<0 THEN

SET new.sum=0;

ENDIF;

END$$

DELIMITER;

trigeri u mysql u4
Trigeri u MySQL-u

Kako trigeri funkcionišu ?

  • Ključna reč BEFORE opredeljuje vreme izvršenja trigera.

U ovom slučaju, triger će biti aktiviran pre svakog novog upisa zapisa u tabelu test.

  • Ključne reči FOR EACH ROW označavaju da će triger biti izvršen za svaki novi slog.
  • Ključne reči OLD i NEW nam omogučavaju pristup vrednostima polja u zapisima na koje se odnosi triger.
  • U INSERT trigeru može se koristiti samo NEW.ime_polja
  • U DELETE trigeru može se koristiti samo OLD.ime_polja
trigeri u mysql u5
Trigeri u MySQL-u
  • OLD i NEW
  • Ključne rečiOLDiNEWse koriste za pristup podacima u zapisima tabele. OLD se koristi za vrednosti polja pre promene, a NEW sadrži vrednost polja posle promene.
  • U programu, polju koje se zove emp_name možemo pristupiti na sledeći način:new.emp_name
  • Primer:

create trigger bi_zaposleni_fer

before insert on zaposleni

for each row

set new.ime := reverse(new.ime);

trigeri u mysql u6
Trigeri u MySQL-u
  • Da bi se triger aktivirao potrebno je da zapis bude dodat u odgovarajuću tabelu.

Primer:

insert into zaposleni (zaposleni,ime) values (4,’David’);

trigeri u mysql u7
Trigeri u MySQL-u
  • Kompleksni trigeri
    • Trigeri koji sadrže više od jedne linije koda
    • Tada se koriste ključne reči BEGIN i END koje imaju svrhu da označe kompajleru početak i kraj koda trigera
    • Kraj svake komande se označava pomoću znaka ;
    • Zbog toga se mora definisati alternativni graničnik (DELIMITER) za ceo programski kod.
    • Obično se koristi $$

DELIMITER $$

trigeri u mysql u8
Trigeri u MySQL-u

Primer:

create trigger bi_zaposleni_fer

before insert on zaposleni

for each row

begin

declare duzina numeric;

set duzina = length(new.ime);

set new.plata = new.plata * duzina;

end

trigeri u mysql u9
Trigeri u MySQL-u
  • Kako se trigeri mogu obrisati ?

DROP TRIGGER naziv_trigera;

slide75
ODBC
  • ODBC(Open DataBase Connectivity), je standardan metod za pristup bazama podataka razvijen 1992. godine.
  • Cilj ODBC-aje da učini mogućim pristup podacima sačuvanim u bilo kom formatu iz bilo koje aplikacije, bez obzira koji RDBMS upravlja podacima.
  • ODBC upravlja pristupom podacima ubacivanjem srednjeg nivoa ( middle layer) , koji se zovedatabasedriver između aplikacije i RDBMS. Namena ovog nivoa je da upite nad podacima koje pravi aplikacija prevede u komande koje RDBMS razume.
  • Da bi ovo moglo da funkcioniše, i aplikacija i DBMS moraju imati podršku za ODBC, što znači da aplikacija mora biti sposobna da prosleđuje ODBC komande, a RDBMS takođe sposoban da na te komande odgovori.
ad