E N D
Osnove mySQL-a Admir Džaferović
Uvod • MySQL je besplatan, opensource sustav za upravljanje bazom podataka. MySQL je čest izbor baze za projekte otvorenog koda, te se distribuira kao sastavni dio serverskih Linux distribucija, no također postoje inačice i za ostale operacijske sustave poput Mac OS-a, Windowse itd. • MySQL baza je slobodna za većinu uporaba. Ranije u svom razvoju, MySQL baza podataka suočila se s raznim protivnicima MySQL sustava organiziranja podataka jer su joj nedostajale neke osnovne funkcije definirane SQL standardom. Naime, MySQL baza je optimizirana kako bi bila brza nauštrb funkcionalnosti. Nasuprot tome, vrlo je stabilna i ima dobro dokumentirane module i ekstenzije te podršku od brojnih programskih jezika: PHP, Java , Perl, Python... • MySQL baze su relacijskog tipa, koji se pokazao kao najbolji način skladištenja i pretraživanja velikih količina podataka i u suštini predstavljaju osnovu svakog informacijskog sustava, tj. temelj svakog poslovnog subjekta koji svoje poslovanje bazira na dostupnosti kvalitetnih i brzih informacija. • MySQL i PHP su osvojili veliki dio tržišta jer su opensource, dakle, mogu se besplatno koristiti.
MySQL WORKBENCH • MySQL Workbench je jedan od takvih besplatnih alata koji ima puno više mogućnosti nego će vam za početak trebati, ali upravo zato je odličan, jer kako vi budete više znali o bazama podataka, tako će vas MySQL Workbench pratiti i pružiti vam da napravite ono što ste zamislili. • Dok dođemo do koraka modeliranja baze podataka već imamo ideju o aplikaciji i što bi ona trebala sadržavati, bez obzira koliko je jednostavna ili kompleksna.
Pravila pisanja côda • SQL ne pravi razliku između malih i velikih slova (tj. nije casesensitive) što znači da su slijedeće dvije naredbe iz primjera jednake: primjer 1: select prezime from osoba where ime = ‘John’ primjer 2: SELECT prezime FROM osoba WHERE ime = ‘John’ • Radi lakšeg prepoznavanja koda preporučljivo je da se naredbe pišu velikim slovima, kao u primjeru 2., a sve ostalo malim slovima. • U nekim bazama niz znakova (string) mora biti napisan kao što je u bazi. Znači, u gornjim naredbama nije isto ako piše John ili JOHN ali isto to ne mora vrijediti i za Microsoft SQL.
Komentari • Komentari su tekst koji se piše kao podsjetnik i oni nemaju nikakvu vezu sa kodom osim što daju određenu informaciju programeru koji čita kod, tj. oni se ne izvršavaju. • Postoje dvije vrste komentara: -- ovo je komentar tj. oznaka za komentar je -- a iza slijedi tekst komentara /* komentar */ ovo je također komentar koji se proteže kroz više redova
Imena objekata • Imena objekata u SQL (imena tabela, kolona, pogleda) prave se tako da prvi znak mora biti slovo (a-z, A-Z) ili podvučeno (underline) _, te u nekim slučajevima, @ i #.Razmak i ostali specijalni znakovi se mogu koristiti ali nije preporučljivo. select prezime from osoba whereime_prezime= ‘John Smith’
Brisanje baze podataka • Prilikom korištenja nekog DBMS-a (MircrosoftSQL), potrebno je izabrati bazu sa kojom ćemo da radimo. Prvo ćemo pogledati spisak baza na serveru. Da bismo to uradili koristimo slijedeću komandu (OBAVEZNO je “;” na kraju svake komande). • Iskoristit ću bazu BZB, koju sam kreirao da bih pokazao upotrebu naredbe DROP koja služi za brisanje baze. drop database zaposleni; • Nakon ove naredbe baza je obrisana. Važno je napomenuti da neće biti nikakvog upozorenja tj. pitanja tipa "Da li ste sigurni?", tako da sa koričenjem naredbe DROP u bilo kakvom smislu treba biti veoma oprezan. Jednom obrisani podaci više se ne mogu vratiti.
Kreiranje baze podataka • Kreiranje baze je veoma jednostavno (kao i njeno brisanje). Baza se kreira uz pomoć ključne riječi CREATE: create database zaposeni;
Biranje baze podataka • Prije nego što u bazi podataka zaposleninapravimo novu tabelu ili uradimo bilo šta drugo u njoj, moramo obavijestiti MySQL da želimo da radimo u našoj novoj bazipodataka. To se radi pomoću komande use, na sledeći način: use zaposleni; • Sada je izabrana (otvorena) baza podataka employee; za sve akcije koje izvršimo od sad pa nadalje, podrazumevaće se da se odnose na tu bazu podataka.
Pravljenje tabela • Tabele u bazi podataka zaposleni napravit ćemo pomoću SQL-ove komande CREATE TABLE. Uobičajen oblik te komande je sledeći: create table ime_tabele( definicije kolona tabele ) [type=tip_tabele]; • Kao što vidite, komanda počinje riječima create table, iza kojih slijedi ime tabele koju bismo željeli da napravimo, a zatim dolazi grupa definicija svih kolona tabele. Na kraju komande možete po potrebi zadati tip mašine baze podataka koji biste željeli da se koristi.
Primjer tabele sektor i zaposlenik create table sektor( sektorIDintnot null auto_increment primary key, imevarchar(30) ); create table zaposlenik( zaposlenik intnotnullauto_incrementprimary key, ime varchar(30), posao varchar (30), sektorIDintnotnullreferences sektor(sektorID) );
Primjer tabele create table vještine_zaposlenog( zaposlenik intnotnullreferences zaposlenik(zaposlenik), vjestinavarchar(15) notnull, primarykey (zaposlenik, vjestina)); create table klijent ( klijentIDintnotnullauto_incrementprimary key, ime varchar(40), adresa varchar(100), kontakt_osobavarchar ( 80) , broj_kontakt_osobechar(12));
Primjer tabele create table zadatak( klijentIDintnotnullreferencesklijent(klijentID), zaposlenik intnotnullreferenceszaposlenik(zaposlenik), datum_pocetkadate notnull, sati float, primarykey (klijentID, zaposlenik, datum_pocetka) );
Tipovi podataka u kolonama • Cjelobrojni • Decimalni • Znakovni • Datumsko vremenski
Cjelobrojni • BIGINT – zauzima 8 bajtova memorije i može se koristiti za rad sa vrijednostima u opsegu od -263 do 263 -1. • INT – zauzima 4 bajta memorije i može se koristiti za rad sa vrijednostima u opsegu od -231 do 231 -1. • SMALLINT – zauzima 2 bajta memorije i može se koristiti za rad sa vrijednostima u opsegu od -215 do 215 -1. • TINYINT- zauzima jedan bajt memorije i može se koristiti za rad sa vrijednostima u opsegu od 0 do 255. • MONEY-zauzima 8 bajtova memorije. • SMALLMONEY – zauzima 4 bajta memorije
Decimalni • REAL- zauzima 4 bajta memorije, a preciznost mu je 7 cifara. • FLOAT- zauzima 8 bajtova memorije, a preciznost mu je 15 cifara. • DECIMAL-zauzima od 2 bajta do 17 bajtova memorije, u zavisnosti od preciznosti koja se zadaje.
Znakovni • Tip podataka CHAR(n) - jednobajtni znakovni nizovi fiksne veličine koji se mogu koristiti za čuvanje podataka veličine najviše 8000 bajtova. Tip CHAR koristiti kada je veličina kolone poznata i nepromjenljiva. • Tip podataka VARCHAR(n) - znakovni nizovi koji se sastoje od promjenljivog broja jednobajtnih znakova, koji može biti najviše 8000. Ako je podatak manji od definiranih n bajtova, on će se na disku zauzeti samo onoliko bajtova kolika mu je stvarna veličina. • Tip podataka TEXT - namijenjen je znakovnim nizovima koji se sastoje od promjenljivog broja jednobajtnih znakova, veličina premašuje 8000 bajtova. • Tip podataka NCHAR(n) - znakovni nizovi fiksne dužine sastavljeni od znakova u Unicode formatu. • Tip podataka NVARCHAR(n) - znakovni nizovi promjenljive dužine sastavljeni od znakova u Unicode formatu.
Datumsko vremenski • Smalldatetime – (4 bajta za datum i vreme do 6.juna 2079) • DATETIME – (8 bajtova za datum i vreme do 31.DEC.9999) • DATETIME2 – (ekvivalentno sa datetime sa većom tačnošću od 100 nanosekundi) • DATE - (3 bajta, koji sadrže samo datum) • TIME – (5 bajtova, koji sadrže vreme sa tačnošću) • DATETIMEOFFset - (ekvivalentno je sa datetime2, uz dodatakuvremenske zone)
Komanda INSERT • MySQL-ova komanda INSERT služi za umetanje novih redova u tabele. Pogledat ćemo najprije jedan primjer: insert intosektor values (42, 'Financije'), (128, 'Istraživanje i razvoj'), (null, 'Ljudsko istraživanje'), (null, 'Marketing');
Primjer insert intozaposlenik values (7513, 'ElminPečenković', 'Programer',128), (9842, 'Sanadin Majetić', 'Stručnjak za BP', 42), (6651, 'Alma Mukelafić', 'Programer', 128), (9006, 'MukelafaPoturak', 'Sistem Admin', 128);
Primjer insert intovještine_zaposlenogvalues (7513, 'C++'), (7513, 'Perl'), (7513, 'Java'), (9842, 'DB2'), (6651, 'VB'), (6651, 'Java'), (9006, 'NT'), (9006, 'Linux');
Primjer insert intoklijent values (NULL, 'Tele Optic', 'Šturlići', 'Pupan Oždrljić',95551234 ), (NULL, 'ProCredit', '98 Mahmići', 'Meho Majetić',95559876) ;
Primjer insert into zadatak values (1, 7513, '2003-01-20',8.5);