SQL je jezik, namenjen delu z podatki
Podatke hranimo v tabelah. Podatkovna baza je skupina tabel, ki jih med seboj povezuje ključ. To je podatek z unikatno vsebino. Naprimer: hraniti želimo naslednje podatke: priimek, ime, spol, datum rojstva, naslov, izobrazba. Podatke lahko enostavno shranimo v eno tabelo s stolpci priimek, ime, ... izobrazba. Vendar ta strategija shranjevanja ni najbolj posrečena, saj je iskanje po takšni tabeli zamudno, potrebno je prebrati veliko več podatkov, ki jih sploh ne potrebujemo. Veliko bolje je, če podatke hranimo v več kratkih tabelah. Naprimer v prvi tabeli sta priimek, ime, v drugi tabeli priimek, spol, v tretji priimek, datum rojstva itd... Iskanje po takšni bazi je hitrejše, vendar je malce zahtevnejše, saj morajo biti tabele medsebojno povezane, kar je v našem primeru priimek. Kot vidimo je priimek kot rdeča nit v vseh tabelah. Vendar to ni dovolj, poskrbeti moramo še, da je unikaten, da se nikoli ne ponovi. Kaj pa dve sestrici, obe z istim priimkom ? Lahko vpeljemo še en podatek, naprimer uporabniško ime, poskrbimo da je unikaten in je lahko ključ od baze.
Primer uporabe SQL v skripti PHP:
- Podatkovna baza z imenom baza1 že teče na strežniku, kjer pišemo svojo PHP skripto. V bazi so tri tabele. Tabela1 ima tri stolpce: uporabnik, priimek, ime. Tabela2 tri stolpce: uporabnik, spol, datum rojstva. Tabela3 pa: uporabnik, naslov, izobrazba. (Kako naredimo novo bazo in tabele, bo opisano v naslednjih člankih.)
- Če baza že teče na našem strežniku, se nanj povežemo z spodnjim ukazom: (imeti moramo uporabniško ime in geslo za mysql strežnik)
mysql_connect("localhost","uporabniško ime","geslo");
- Potem se povežemo še s svojo bazo, ki se imenuje baza1. Ukaz je:
mysql_query("use baza1");
- Preberemo vse stolpce v Tabela1 z naslednjim ukazom:
$vsistolpci=mysql_query("select * from Tabela1");
- Ali pa preberemo priimke samo tistih vrstic, v katerih je ime Tea:
$vsiTea=mysql_query("select priimek from Tabela1 where ime='Tea'");
- Prebrane podatke potem izpišemo:
while ($Tea=mysql_fetch_array($vsiTea)) {
echo "$Tea[0] $Tea[1] $Tea[2]";
}
- Morda je potrebno vstaviti novo vrstico v Tabelo2:
mysql_query("insert into Tabela2 values ('87206','moški','2012-08-22')");
- Ali pa v Tabela3 izbrišemo vrstice v katerih je izobrazba OŠ:
mysql_query("delete from Tabela3 where izobrazba='OŠ'");
- Pa še v Tabela3 moramo uporabniku 87206 spremeniti datum rojstva na 2014-11-15:
mysql_query("update Tabela3 set datum_rojstva='2014-11-15' where uporabnik='87206'");
Primer generiranja in uporaba ključa:
- Vrednost ključa v novi vrstici je lahko nova številka, ki še ni bila uporabljena v kakšni od že vpisanih vrstic.
- Takšno številko lahko enostavno žrebamo, potem pa preverimo njeno unikatnost. Če je številka že uporabljena, žrebamo ponovno. Spodaj je skripta:
function zrebanje() {
$kljuc=rand(11111,99999);
$zasedeno=False;
$vsevrstice=mysql_query("select uporabnik from Tabela1");
while ($vrstica=mysql_fetch_array($vsevrstice)) {
if ($vrstica[0]==$kljuc) $zasedeno=True;
}
if ($zasedeno) zrebanje() else return $kljuc;
}
- Takšno številko lahko potem uporabimo kot ključ pri dodajanju nove vrstice.
mysql_connect("localhost","uporabnik","geslo");
mysql_query("use baza1");
$kljuc=zrebanje();
mysql_query("insert into Tabela2 values ($kljuc,'moški','2012-08-22'"));
- Verjetno ste opazili, da funkcija zrebanje() kliče sama sebe. Ta privilegij omogoča čudovite možnosti, pazi pa moramo, da ne pade v neskončno zanko.