750 likes | 919 Views
Open source s istem za upravljanje bazama podataka. M ySQL je veoma brz i robus t an sistem za upravljanje relacionim bazama podataka.
E N D
Open source sistem za upravljanje bazama podataka
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 š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 š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 š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 š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 š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 š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 š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 š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 š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 š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 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 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 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 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 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-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-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-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-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-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 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-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-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-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-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-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-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-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-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-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ćnostiMySQL-a • Transakcije • Pogledi (Views) • Uskladištene procedure (Stored procedures) • Funkcije • Trigeri
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-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-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-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-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-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-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-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-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-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 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-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-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š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-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-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-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