SQL

Andmebaasiga suhtlemiseks kasutatakse SQL-keelt. Selles leiduvad käsud andmetabelite loomiseks, sinna andmete lisamiseks, andmete küsimiseks, muutmiseks ja kustutamiseks.  

Tabeli loomiseks käsklus CREATE TABLE. Käsu nimele järgneb tabeli nimi (praegusel juhul lehed). Ning siis sulgudes komadega eraldatuna tulpade nimed ning nende parameetrid. Iga tabeli esimeseks tulbaks on üldjuhul id – identifikaator, mille abil hiljem ridu eristada ja neile viidata. Parameetrid võivad lihtsamate rakenduste puhul enamasti samaks jääda. Selgitused: 

INT – täisarv 

NOT NULL – väärtus ei tohi puududa 

AUTO_INCREMENT – server arvutab lisamisel ise juurde sobiva seni veel kasutamata väärtuse PRIMARY KEY – selle tulba väärtust kasutatakse edaspidi tabeli vastavale reale viitamisel (näiteks muutmise või kustutamise juures). 

Tulp pealkiri siin näites tüübiga VARCHAR(50) ehk siis tekst pikkusega kuni 50 tähte. Sisu tüübiks TEXT, mis tähendab, et pikkust ei piirata. 

Kokku siis lause järgmine, mis tasub valmis kirjutada ning MySQLi käsuviibale või PHPMyAdmini aknasse kopeerida:

CREATE TABLE lehed( 
 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
 pealkiri VARCHAR(50), 
 sisu TEXT 
); 

Kui vastuseks tuli Query OK, siis järelikult ettevõtmine õnnestus. Muidu tuleb veateateid uurida ja uuesti proovida. 

Andmete lisamiseks on loodud käsklus INSERT INTO. Järgneb tabeli nimi, siis sulgudes tulpade nimed, kuhu lisatavad andmed tulevad. Edasi sõna VALUES ning sulgude sisse komadega eraldatult igale tulbale vastav väärtus. Tekstilised andmed paigutatakse ülakomade vahele. 

INSERT INTO lehed (pealkiri, sisu) VALUES (‘Ilmateade’, ‘Kuiv ilm’); 

Tahtes rohkem andmeid lisada, tuleb INSERT lauset lihtsalt mitu korda käivitada, igal korral eraldi andmed sisse pannes.  

INSERT INTO lehed (pealkiri, sisu) VALUES ('Korvpall', 'Treening reedel kell 18'); 

Kui mõned sees, siis on hea vaadata ja kontrollida, et mis sinna täpsemalt sai. Andmete küsimiseks on SQLis loodud käsklus SELECT. Tärn tähendab, et kuvatakse kõikide olemasolevate tulpade andmed. Sõnale FROM järgneb tabeli nimi ning käsu lõppu käivitamiseks semikoolon. Lehtede tabeli sisu tuleb siis välja järgnevalt.

mysql> SELECT * FROM lehed; 
+----+-----------+-------------------------+ 
| id | pealkiri | sisu | 
+----+-----------+-------------------------+ 
| 1 | Ilmateade | Kuiv ilm | 
| 2 | Korvpall | Treening reedel kell 18 | 
+----+-----------+-------------------------+ 
2 rows in set (0.00 sec) 

Nagu näha, id-väärtused on automaatselt ise pandud, kuna vastaval tulbal on juures omadus AUTO_INCREMENT. Tahtes andmeid veel juurde panna, tuleb taas käivitada INSERT-lause sobivate andmetega. Teksti sisestamisele vastab kõige korrasoleku puhul MySQL taas “Query OK”, lisades sinna vahel ka mõjutatud ridade arvu ja kulunud aja – tähtis pigem suuremate andmestike korral.

INSERT INTO lehed (pealkiri, sisu) VALUES ('Matemaatika', 'Homme tunnikontroll'); 

SQLi selecti abil saab andmeid kergesti sobivas järjekorras ja kujul välja küsida. Kui lause lõppu lisatakse ORDER BY koos vastava tulba nimega, siis tulevad andmed välja selle tulba järgi tähestiku järjekorda panduna (kui vastav tulp oli tekstitulp).

mysql> SELECT * FROM lehed ORDER BY sisu; 
+----+-------------+-------------------------+ 
| id | pealkiri | sisu | 
+----+-------------+-------------------------+ 
| 3 | Matemaatika | Homme tunnikontroll | 
| 1 | Ilmateade | Kuiv ilm | 
| 2 | Korvpall | Treening reedel kell 18 | 
+----+-------------+-------------------------+ 
3 rows in set (0.00 sec) 

Saab küsida ka ainult ühe rea väärtusi:

mysql> SELECT pealkiri, sisu FROM lehed WHERE id=3; 
+-------------+---------------------+ 
| pealkiri | sisu | 
+-------------+---------------------+ 
| Matemaatika | Homme tunnikontroll | 
+-------------+---------------------+ 

Kui leitakse, et rida pole enam vajalik, siis selle kustutamiseks sobib käsklus DELETE, kussoovitavalt id järgi määratakse ära, milline rida kustutada. 

mysql> DELETE FROM lehed WHERE id=3; 
Query OK, 1 row affected (0.00 sec) 

Uue SELECT-päringuga saab kontrollida, mis siis sinna tegelikult alles jäi. Kui nüüd juhtutaks INSERT-lausega taas andmeid lisama, siis sellele reale enam id väärtust 3 välja ei antaks – välistamaks näiteks olukorda, kus vanale teatele pandud kommentaarid satuksid uue külge. Primaarvõtmetulba id väärtuseks tuleks uue rea lisamisel vähemasti 4.

mysql> SELECT * FROM lehed; 
+----+-----------+-------------------------+ 
| id | pealkiri | sisu | 
+----+-----------+-------------------------+ 
| 1 | Ilmateade | Kuiv ilm | 
| 2 | Korvpall | Treening reedel kell 18 | 
+----+-----------+-------------------------+