Održivost u poslovanju teška je bez pravilnog upravljanja podacima. Izgradnja dobro definiranog sustava ključna je za upravljanje internim i vanjskim operacijama. Detaljan uvid u poslovne podatke pomaže u razumijevanju cjelokupnog tijeka rada i mjerenju učinkovitosti. Štoviše, korištenje baza podataka štedi vrijeme i omogućuje jednostavan pristup informacijama.
Što je baza podataka?
A baza podataka je organizirani sustav koji se koristi za sigurno pohranjivanje informacija. Nudi kategorizaciju i omogućuje stvaranje tablica za razvrstavanje sličnih vrsta stavki pod jednu grupu. Tablice pružaju opcije za popis informacija u više redaka i stupaca. Kao rezultat toga, poboljšava se kvaliteta i dosljednost podataka. Osim mogućnosti pohrane i jednostavnog pristupa, baze podataka igraju značajnu ulogu u zaštiti privatnosti i osiguravanju sustava. Bilo da se radi o ad hoc pristupu ili dijelu procesa kodiranog u aplikaciju, dohvaćanje podataka jedan je od najkritičnijih aspekata upravljanja bazom podataka.
A upit u relacijskom DMS-u je svaka naredba koja se koristi za dohvaćanje podataka iz tablice. SELECT naredbe se gotovo uvijek koriste u Structured Query Language (SQL) upitima. Postoji nekoliko metoda za dohvaćanje informacija iz baze podataka. Općenito, programeri preferiraju opciju naredbenog retka jer je brza i učinkovita. Omogućuje neometano slanje upita.
U ovom vodiču, predstavit ćemo vam MySQL i raspraviti kako raditi s upitima u MySQL-u. Počnimo!
Preduvjeti
Kako biste pratili ovaj vodič, trebat će vam sljedeće:
-
Najnovija verzija sustava Ubuntu je instalirana na vašem sustavu.
-
Korisnici sustava moraju imati sudo privilegije.
-
Ako imate poteškoća s pristupom svom sudo računu, razmislite o promjeni MySQL root lozinke.
-
-
MySQL je postavljen na vašem poslužitelju.
Korak 1 — Stvaranje i postavljanje baze podataka
Prije nego što počnemo i napišemo svoj prvi SQL upit, moramo stvoriti bazu podataka i dodati joj tablice. Nakon toga ćemo tablice popuniti oglednim podacima. Rad s bazama podataka pomoći će vam da razumijete osnovno postavljanje i ulije vam samopouzdanje u radu s upitima.
Praktično iskustvo najučinkovitiji je način za izgradnju koncepata i razumijevanje važnosti baza podataka. U ovom vodiču provest ćemo vas kroz korištenje baza podataka i njihov značaj za rješavanje stvarnih problema. Pogledajmo scenarij kako bismo razumjeli kako baze podataka mogu pomoći u organiziranju zapisa na strukturiran način.
Scenarij: Stvorit ćemo bazu podataka u kojoj grupa studenata odlazi na odmor kako bi proslavili svoje rođendane. Prije odlaska na odmor planiraju sudjelovati u prijateljskom natjecanju u plivanju. Također, svaki prijatelj u grupi planira popis aktivnosti koje treba obaviti kako bi njihovo putovanje bilo uzbudljivo i ugodno.
Prvo otvorite MySQL kao root korisnik:
|
1 |
$ sudo mysql |
Zatim stvorite bazu podataka pokretanjem sljedeće naredbe:
|
1 2 3 |
mysql> CREATE DATABASE `vacation`; Query OK, 1 row affected (0.52 sec) |
Zatim upotrijebimo našu bazu podataka pomoću sljedeće naredbe:
|
1 |
mysql> USE vacation; |
Nakon toga ćemo stvoriti tablice u našoj bazi podataka. Nazovite prvu tablicu celebration. Naša tablica imat će stupce za imena naših prijatelja (name), turnire koje su osvojili (wins) i također stupac za njihovo najbolje vrijeme (time):
|
1 2 3 4 5 6 7 |
mysql> CREATE TABLE celebration ( -> name varchar(50), -> wins real, -> time real -> ); Query OK, 0 rows affected (2.03 sec) |
Zatim ćemo našu tablicu popuniti podacima:
|
1 2 3 4 5 6 7 8 9 |
mysql> INSERT INTO celebration (name, wins, time) VALUES('Austin', '4', '15.5'), ('Ivan','7','9'), ('Aisha','10','5'), ('Zane','13','7.5'); Query OK, 4 rows affected (0.29 sec) Records: 4 Duplicates: 0 Warnings: 0 |
Zatim stvorite još jednu tablicu unutar naše baze podataka kako biste pohranili informacije o njihovim omiljenim rođendanskim aktivnostima. Stvorit ćemo tablicu pod nazivom vacation i imati sljedeće stupce:
|
Popis |
Pojedinost |
|
name: |
Pohranite ime svakog prijatelja. |
|
birthdate: |
Prati datum rođenja svakog pojedinca. |
|
activity: |
Vodi evidenciju o njihovoj omiljenoj aktivnosti. |
|
Destination: |
Pohranjuje informacije o omiljenom odredištu svakog pojedinca. |
|
meal: |
Prati omiljeno jelo koje pojedinac voli. |
|
1 2 3 4 5 6 7 8 |
mysql> CREATE TABLE vacation ( name varchar(50), birthdate date, activity varchar(50), destination varchar(50), meal varchar(50) ); Query OK, 0 rows affected (0.09 sec) |
Popunite tablicu podacima:
|
1 2 3 4 5 6 7 8 9 10 |
mysql> CREATE TABLE vacation ( name varchar(50), birthdate date, activity varchar(50), destination varchar(50), meal varchar(50) ); Query OK, 0 rows affected (0.09 sec) Records: 4 Duplicates: 0 Warnings: 0 |
Sada ste završili s postavljanjem svoje baze podataka.
Korak 2 — Započnite s naredbama SELECT
Upiti u SQL-u obično počinju s SELECT. Koristi se u upitima za određivanje koji stupci u tablici trebaju biti vraćeni s rezultatima. Upit također mora uvijek uključivati FROM, što se koristi za određivanje tablice koju će naredba pretraživati.
Upiti slijede sintaksu u nastavku:
|
1 |
mysql> SELECT column_to_select FROM table_to_select WHERE certain_conditions_apply; |
Upotrijebit ćemo sintaksu upita za vraćanje stupca meal iz tablice vacation :
|
1 |
mysql> SELECT meal FROM vacation; |
Naš izlaz bit će sljedeći:
|
1 2 3 4 5 6 7 8 9 10 |
+-------+ | meal | +-------+ | Steak | | Sushi | | Fries | | Tofu | +-------+ 4 rows in set (0.00 sec) |
Također možete odabrati više stupaca koristeći stupac za njihovo razdvajanje:
|
1 |
mysql> SELECT name, destination FROM vacation; |
Izlaz:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+-------------+ | name | destination | +--------+-------------+ | Austin | Maldives | | Ivan | Mauritius | | Aisha | Colorado | | Zane | Bora Bora | +--------+-------------+ 4 rows in set (0.00 sec) |
Također možete koristiti asterisk (*) ako želite prikazati sve stupce u tablici:
|
1 |
mysql> SELECT * FROM celebration; |
Izlaz:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+------+ | name | wins | time | +--------+------+------+ | Austin | 4 | 15.5 | | Ivan | 7 | 9 | | Aisha | 10 | 5 | | Zane | 13 | 7.5 | +--------+------+------+ 4 rows in set (0.00 sec) |
Ako želite filtrirati zapise koji zadovoljavaju određeni uvjet, koristite WHERE. Redovi koji ne zadovoljavaju navedeni uvjet uklanjaju se iz rezultata. Klauzula WHERE koristi sljedeću sintaksu:
|
1 |
mysql> . . . WHERE column_name comparison_operator value |
To je operator usporedbe koji definira kako bi se navedeni stupac trebao usporediti s vrijednošću. Uobičajeni SQL operatori usporedbe uključuju:
|
Operator |
Upotreba |
|
= |
Jednakost |
|
!= |
Nejednakost |
|
< |
Manje od |
|
> |
Veće od |
|
<= |
Manje od ili jednako |
|
>= |
Veće od ili jednako |
|
BETWEEN |
Provjerava leži li vrijednost unutar zadanog raspona. |
|
IN |
Provjerava je li vrijednost reda sadržana u skupu određenih vrijednosti. |
|
EXISTS |
Provjerava postoji li red |
|
LIKE |
Provjerava podudara li se vrijednost s navedenim nizom znakova |
|
IS NULL |
Provjerava ima li null vrijednosti |
|
IS NOT NULL |
Provjerava sve vrijednosti osim NULL |
Ako biste željeli pronaći Aishino omiljeno odredište, mogli biste upotrijebiti upit u nastavku:
|
1 |
mysql> SELECT destination FROM vacation WHERE name ='Aisha'; |
Upit će zatim vratiti:
|
1 2 3 4 5 6 7 |
+-------------+ | destination | +-------------+ | Colorado | +-------------+ 1 red u setu (0.03 sek) |
SQL podržava upotrebu zamjenskih znakova, koji su posebno korisni u WHERE klauzulama. Znakovi postotka ( %) označavaju nula ili više nepoznatih znakova, dok podvlake ( _) označavaju jedan nepoznati znak. Oni su korisni ako želite pronaći određeni unos u tablici, ali niste sigurni u vezi tog unosa.
Na primjer, ako ste zaboravili omiljeno odredište prijatelja i znali samo slovo kojim počinje, na primjer, “m.” Naziv odredišta možete pronaći pomoću sljedećeg upita:
|
1 |
mysql> SELECT destination FROM vacation WHERE destination LIKE 'm%'; |
Upit će vratiti:
|
1 2 3 4 5 6 7 8 |
+-------------+ | destination | +-------------+ | Maldives | | Mauritius | +-------------+ 2 reda u setu (0.04 sek) |
Kada radite s bazama podataka, možete naići na stupce ili tablice s relativno dugim nazivima ili nazivima koji su teški za čitanje. U tim slučajevima nazive možete učiniti čitljivijima pomoću ključne riječi AS za stvaranje alijasa. Alijasi stvoreni pomoću AS vrijede samo za vrijeme trajanja upita za koji su stvoreni:
|
1 2 3 4 5 6 7 8 9 10 11 |
mysql> SELECT name AS E, destination as D, activity as A FROM vacation; +--------+-----------+-------------------+ | E | D | A | +--------+-----------+-------------------+ | Austin | Maldives | skiing | | Ivan | Mauritius | paragliding | | Aisha | Colorado | mountain climbing | | Zane | Bora Bora | fishing | +--------+-----------+-------------------+ 4 reda u setu (0.00 sek) |
Korak 3 — Uvod u agregatne funkcije
Kada radite s podacima, ne želite uvijek vidjeti same podatke. Radije biste imali informacije o podacima. Slanjem SELECT upita, možete interpretirati ili izvoditi izračune na svojim podacima koristeći SQL sintaksu. Oni se nazivaju agregatnim funkcijama.
Funkcija COUNT broji i vraća broj redaka koji zadovoljavaju određeni skup kriterija. Na primjer, ako želite znati koliko prijatelja radije ide na Maldive, možete koristiti sljedeći upit:
|
1 |
mysql> SELECT COUNT(destination) FROM vacation WHERE destination = 'Maldives'; |
Vratit će se sljedeći rezultati:
|
1 2 3 4 5 6 7 |
+--------------------+ | COUNT(destination) | +--------------------+ | 1 | +--------------------+ 1 red u setu (0.06 sek) |
MIN se koristi za pronalaženje najmanje vrijednosti unutar određenog stupca:
|
1 |
mysql> SELECT MIN(wins) FROM celebration; |
Upit će ispisati:
|
1 2 3 4 5 6 7 |
+-----------+ | MIN(wins) | +-----------+ | 4 | +-----------+ 1 red u setu (0.02 sek) |
MAX se koristi za pronalaženje najveće numeričke vrijednosti u zadanom stupcu:
|
1 |
mysql> SELECT MAX(wins) FROM celebration; |
Očekivani izlaz je:
|
1 2 3 4 5 6 7 |
+-----------+ | MAX(wins) | +-----------+ | 13 | +-----------+ 1 red u setu (0.03 sek) |
Obje funkcije, MIN i MAX, mogu se koristiti na numeričkim i abecednim podacima. Kada se primijene na stupac tekstualnih vrijednosti, funkcija MIN vraća prvu vrijednost po abecednom redu.
Funkcija MIN vraća prvu vrijednost po abecednom redu:
|
1 |
mysql> SELECT MIN(name) FROM celebration; |
Evo kako će izgledati izlaz:
|
1 2 3 4 5 6 7 |
+-----------+ | MIN(name) | +-----------+ | Aisha | +-----------+ 1 red u setu (0.00 sek) |
Funkcija MAX vraća zadnju vrijednost po abecednom redu:
|
1 |
mysql> SELECT MAX(name) FROM celebration; |
Ovo će biti izlaz:
|
1 2 3 4 5 6 7 |
+-----------+ | MAX(name) | +-----------+ | Zane | +-----------+ 1 red u skupu (0.00 sek) |
Korak 4 — Manipuliranje izlazima upita
Još jedna popularna klauzula koja se koristi je GROUP BY klauzula. Koristi se pri izvođenju agregatne funkcije na jednom stupcu, ali u odnosu na podudarne vrijednosti u drugom:
|
1 |
mysql> SELECT COUNT(name), activity FROM vacation GROUP BY activity; |
Izlaz će biti:
|
1 2 3 4 5 6 7 8 9 10 |
+-------------+-------------------+ | COUNT(name) | activity | +-------------+-------------------+ | 1 | skijanje | | 1 | paragliding | | 1 | planinsko penjanje | | 1 | ribolov | +-------------+-------------------+ 4 reda u skupu (0.04 sek) |
Za sortiranje rezultata upita koristite ORDER BY klauzulu. Brojčane vrijednosti se prema zadanim postavkama sortiraju uzlazno, dok se tekstualne vrijednosti sortiraju abecednim redom. Upit u nastavku navodi stupce name i birthdate, ali sortira rezultate prema birthdate:
|
1 |
mysql> SELECT name, birthdate FROM vacation ORDER BY birthdate; |
Izlaz će biti sljedeći:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------------+ | name | birthdate | +--------+------------+ | Zane | 1996-01-01 | | Aisha | 1999-07-24 | | Austin | 2002-01-07 | | Ivan | 2010-12-18 | +--------+------------+ 4 reda u skupu (0.04 sek) |
Izlaz je u uzlaznom redoslijedu; za sortiranje u silaznom redoslijedu zatvorite upit riječju DESC:
|
1 |
mysql> SELECT name, birthdate FROM vacation ORDER BY birthdate DESC; |
Pogledajte izlaz:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------------+ | name | birthdate | +--------+------------+ | Ivan | 2010-12-18 | | Austin | 2002-01-07 | | Aisha | 1999-07-24 | | Zane | 1996-01-01 | +--------+------------+ 4 reda u skupu (0.00 sek) |
Klauzula HAVING dodana je u SQL kako bi pružila sličnu funkcionalnost kao i klauzula WHERE dok je istovremeno kompatibilna s agregatnim funkcijama. Razlika između ove dvije klauzule je u tome što se WHERE odnosi na pojedinačne zapise, a HAVING se odnosi na grupne zapise. U tu svrhu, klauzula GROUP BY mora biti prisutna kad god se koristi klauzula HAVING:
|
1 |
mysql> SELECT COUNT(name), activity FROM vacation GROUP BY activity HAVING COUNT(name) >= 1; |
Upit će dati izlaz:
|
1 2 3 4 5 6 7 8 |
+-------------+-------------------+ | COUNT(name) | activity | +-------------+-------------------+ | 1 | skijanje | | 1 | paragliding | | 1 | planinsko penjanje | | 1 | ribolov | +-------------+-------------------+ |
Vrijednost COUNT je 1 za sve jer niti jedno dvoje prijatelja ne voli istu aktivnost.
Korak 5 — Upit nad više tablica
Klauzula JOIN može se koristiti u rezultatu upita za kombiniranje redaka iz dviju ili više tablica. To postiže pronalaženjem povezanog stupca između tablica i odgovarajućim sortiranjem izlaza.
SELECT naredbe koje uključuju klauzulu JOIN slijede sintaksu u nastavku:
|
1 2 3 |
mysql> SELECT table1.column1, table2.column2 mysql> FROM table1 mysql> JOIN table2 ON table1.related_column=table2.related_column; |
Ako biste željeli kupiti svakom od svojih prijatelja trofej za njihove pobjede u plivanju na njihove rođendane, mogli biste stvoriti upit koji će spojiti obje tablice kako bi vam pomogao pronaći sve informacije koje želite jednim upitom:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration JOIN vacation ON celebration.name=vacation.name; |
Izlaz će biti:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | +--------+------+------------+ 4 redaka u skupu (0.00 sek) |
Ovo je unutarnji JOIN izraz. To je zato što odabire sve zapise koji imaju podudarne vrijednosti u obje tablice i ispisuje ih u skup rezultata. Zapisi koji ne odgovaraju upitu nisu uključeni. Možemo uključiti novi redak u naše tablice koji ne odgovara nijednom unosu:
|
1 2 3 4 |
mysql> INSERT INTO celebration(name,wins,time) VALUES('Ella', '1', '120'); Upit u redu, 1 redak pogođen (0.01 sek) |
|
1 2 3 4 |
mysql> INSERT INTO celebration(name,wins,time) VALUES('Ella', '1', '120'); Upit u redu, 1 redak pogođen (0.01 sek) |
Zatim ponovno pokrenite SELECT naredbu s JOIN izrazom:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate -> FROM celebration -> JOIN vacation ON celebration.name=vacation.name; +--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | +--------+------+------------+ 4 redaka u skupu (0.00 sek) |
Budući da tablica celebration nema unos za Petera, a tablica vacation nema unos za Ellu, ti zapisi nedostaju.
Možemo vratiti sve zapise iz jedne od tablica pomoću vanjskog JOIN izraza. To može biti ili LEFT JOIN ili RIGHT JOIN. LEFT JOIN vraća sve zapise iz lijeve tablice i samo podudarne zapise iz desne tablice. Lijeva tablica u kontekstu vanjskih spajanja je ona na koju se odnosi FROM izraz, a desna tablica je bilo koja tablica na koju se odnosi nakon JOIN naredbe.
Ponovno pokrenite upit, ali upotrijebite LEFT JOIN izraz:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration LEFT JOIN vacation ON celebration.name=vacation.name; |
Naredba će vratiti sve zapise iz lijeve tablice ( celebration) čak i ako nema odgovarajući zapis u desnoj tablici. Kada nema podudarnog zapisa u desnoj tablici, on se vraća kao NULL:
|
1 2 3 4 5 6 7 8 9 10 11 |
+--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | | Ella | 1 | NULL | +--------+------+------------+ 5 redaka u skupu (0.00 sek) |
Ovo je sada RIGHT JOIN izraz:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration RIGHT JOIN vacation ON celebration.name=vacation.name; |
Sve vrijednosti iz desne tablice bit će vraćene (vacation). Budući da je Peterov birthdate zabilježen u desnoj tablici, a ne u lijevoj tablici, stupci name i wins će vratiti NULL vrijednosti u tim redcima:
|
1 2 3 4 5 6 7 8 9 10 11 |
+--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | | NULL | NULL | 1991-05-03 | +--------+------+------------+ 5 redaka u setu (0.01 sek) |
Možete koristiti UNION klauzulu umjesto JOIN za dohvaćanje zapisa iz više tablica. Operator UNION se razlikuje od klauzule JOIN po tome što kombinira rezultate dvaju SELECT iskaza u jedan stupac, umjesto da ispisuje rezultate iz više tablica kao jedinstvene stupce pomoću jednog SELECT iskaza.
Možete pokrenuti ovaj upit za ilustraciju:
|
1 |
mysql> SELECT name FROM celebration UNION SELECT name FROM vacation; |
Upit uklanja duplicirane unose. Ovo je zadano ponašanje operatora UNION:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
+--------+ | name | +--------+ | Austin | | Ivan | | Aisha | | Zane | | Ella | | Peter | +--------+ 6 redaka u setu (0.00 sek) |
Za vraćanje svih unosa (plus duplikata) koristite operator UNION ALL:
|
1 |
mysql> SELECT name FROM celebration UNION ALL SELECT name FROM vacation; |
Izlaz:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
+--------+ | name | +--------+ | Austin | | Ivan | | Aisha | | Zane | | Ella | | Austin | | Ivan | | Aisha | | Zane | | Peter | +--------+ 10 redaka u setu (0.00 sek) |
Podupiti su još jedna metoda za upite nad više tablica. Podupiti su upiti koji su zatvoreni unutar drugog upita (također poznati kao unutarnji ili ugniježđeni upiti). Oni su korisni kada želite usporediti rezultate upita s rezultatima zasebne agregatne funkcije.
Koristit ćemo primjer pokušaja pronalaženja koji je prijatelj osvojio više plivačkih turnira od Elle. Umjesto da ispitujete koliko je mečeva Ella osvojila, a zatim pokrećete drugi upit da biste vidjeli tko je osvojio više igara od toga, oboje možete izračunati jednim upitom:
|
1 2 3 4 |
mysql> SELECT name, wins FROM celebration -> WHERE wins > ( -> SELECT wins FROM celebration WHERE name = 'Ella' -> ); |
Upit će vratiti:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+ | name | wins | +--------+------+ | Austin | 4 | | Ivan | 7 | | Aisha | 10 | | Zane | 13 | +--------+------+ 4 redaka u setu (0.06 sek) |
Ako biste željeli odvesti svoje prijatelje na iznenadni odmor, možete upotrijebiti upit kako biste vidjeli tko ima najviše pobjeda i vratili njihovo odredište:
|
1 2 3 4 |
mysql> SELECT name, destination, activity, meal -> FROM vacation -> WHERE name = ( SELECT name FROM celebration -> WHERE wins = (SELECT MAX(wins) FROM celebration)); |
Upit će vratiti:
|
1 2 3 4 5 6 7 |
+------+-------------+----------+------+ | name | destination | activity | meal | +------+-------------+----------+------+ | Zane | Bora Bora | fishing | Tofu | +------+-------------+----------+------+ 1 redak u setu (0.00 sek) |
Ovaj iskaz sadrži podupit unutar podupita.
Zaključak
Generiranje upita jedan je od najčešćih zadataka u upravljanju bazama podataka. Postoji nekoliko alata za administraciju baza podataka poput phpMyAdmin i pgAdmin koje možete koristiti za rad s upitima i vizualizaciju njihovih rezultata. Međutim, SELECT iskaz iz naredbenog retka najpoželjniji je izbor zbog jednostavnosti korištenja i izvrsne kontrole.
Nadalje, postoji mnogo vodiča o bazama podataka koje možete istražiti na našem blogu:
- SQLite vs MySQL vs. PostgreSQL: Usporedba sustava za upravljanje relacijskim bazama podataka
- Brza rješenja za popravak oštećenih tablica u MySQL-u: Vodič
- Kako instalirati MySQL na Centos 7
- MySQL korisnik — Kreiranje i dodjela dopuštenja
- Postavljanje replikacije u MySQL-u na Ubuntuu
Ugodan rad na računalu!
Komentari
Još nema komentara. Budite prvi.