Osnovni ukazi za upravljanje baze podatkov MySQL - I. del


Baza podatkov je strukturiran nabor podatkov, shranjenih v elektronski obliki. Koncept baze podatkov so poznali že naši predniki, tudi ko ni bilo računalnikov, vendar je bilo ustvarjanje in vzdrževanje takšne baze podatkov zelo dolgočasno. V ročni zbirki podatkov recimo na 100 straneh, če morate iskati vse zaposlene, katerih plača je bila manjša od 10 tisoč, samo pomislite, kako težko bi bilo to potem.

V današnjem svetu preprosto ne morete ubežati zbirki podatkov. Trenutno milijoni baz podatkov po vsem svetu delujejo za shranjevanje in pridobivanje vseh vrst podatkov, pa naj gre za strateške podatke, podatke o zaposlenih ali spletne tehnologije.

Bazo podatkov pogosto imenujejo začasni postopek, saj končni uporabnik niti ni viden niti končni uporabnik ne deluje neposredno z bazo podatkov. Delajo na front-end procesih, tj. PHP, VB, ASP.NET itd.

Na voljo je več strežnikov in odjemalcev baz podatkov, kot so Oracle, MySQL, MySQLi, MongoDB itd. Sintaksa vseh teh je bolj ali manj enaka. Obvladovanje enega pomeni pridobivanje nadzora nad večino od njih in učenje poizvedb po zbirki podatkov je zelo enostavno in zabavno.

Začnimo s preprostimi poizvedbami v bazi podatkov. Uporabili bomo MySQL, ki je privzeto priložen večini distribucij Linuxa. Lahko ga namestite ročno iz repozitorija, če v vašem primeru ni privzeto nameščen.

No, poizvedba po zbirki podatkov je preprost del kode, ki se pošlje v bazo podatkov, da se po potrebi prilagodijo in izboljšajo rezultati.

Namestite bazo podatkov MySQL

Za namestitev zbirke podatkov MySQL uporabite upravitelja paketov “yum” ali “apt”.

# yum install mysql mysql-client mysql-server  (on Yum based Systems)

# apt-get install mysql mysql-client mysql-server (on Apt based Systems)

Zaženite storitev zbirke podatkov MySQL kot:

# service mysqld start
or
# service mysql start

Dobro namestitev baze podatkov MySQL vas bo pripeljala do konfiguracije, kjer boste pozvani, da nastavite skrbniško geslo itd. Ko končate z namestitvijo in zagonom strežnika, pojdite na poziv MySQL.

# mysql -u root -p

Zamenjajte root s konfiguriranim uporabniškim imenom in ob pozivu vnesite geslo. Če je poverilnica za prijavo pravilna, boste takoj utripali na pozivu MySQL.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 195 

Server version: 5.5.31-0+wheezy1 (Debian) 

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. 
Other names may be trademarks of their respective owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Zdaj je izvajanje poizvedb v tem pozivu zelo poučno in zabavno.

mysql> create database tecmint ;
Query OK, 1 row affected (0.02 sec) 

mysql>

Opomba: Poroča, da je bila poizvedba pravilna, kar pomeni, da je ustvarjena baza podatkov. Novo ustvarjeno bazo podatkov lahko preverite kot.

mysql> show databases; 
+--------------------+
| Database           | 
+--------------------+ 
| information_schema | 
| mysql              | 
| performance_schema | 
| tecmint            | 
| test               | 
+--------------------+ 
9 rows in set (0.00 sec) 
mysql>

Opomba: V zgornjem izhodu opazite svojo bazo podatkov.

Zdaj morate izbrati bazo podatkov, da boste lahko delali na njej.

mysql> use tecmint;
Database changed
mysql>

Tu bomo ustvarili tabelo z napisom "minttec" s tremi polji:

mysql> CREATE TABLE minttec (
    -> id Int(3), 
    -> first_name Varchar (15), 
    -> email Varchar(20) 
    -> ); 
Query OK, 0 rows affected (0.08 sec) 
mysql>

Opomba: Zgornja poizvedba pravi V redu, kar pomeni, da je bila tabela ustvarjena brez napak. Če želite preveriti tabelo, zaženite spodnjo poizvedbo.

mysql> show tables; 
+-------------------+ 
| Tables_in_tecmint | 
+-------------------+ 
| minttec           | 
+-------------------+ 

1 row in set (0.00 sec) 

mysql>

Do zdaj gre vse v redu. Ja! Stolpce, ki ste jih ustvarili v tabeli “minttec”, si lahko ogledate kot:

mysql> show columns from minttec; 

+------------+-------------+------+-----+---------+-------+ 
| Field      | Type        | Null | Key | Default | Extra | 
+------------+-------------+------+-----+---------+-------+ 
| id         | int(3)      | YES  |     | NULL    |       | 
| first_name | varchar(15) | YES  |     | NULL    |       | 
| email      | varchar(20) | YES  |     | NULL    |       | 
+------------+-------------+------+-----+---------+-------+ 
3 rows in set (0.00 sec)

mysql>

To ni bila nič manj kot čarovnija. Vseeno vam bom povedal o vrstah deklaracije in njihovem pomenu.

  1. Int je celo število
  2. Varchar je char s spremenljivo dolžino, kot je definirana. Vrednost za Type je dolžina polja, do katerega lahko shrani podatke.

V redu, zdaj moramo za stolpcem "ime_ime" dodati stolpec z napisom "last_name".

mysql> ALTER TABLE minttec ADD last_name varchar (20) AFTER first_name; 
Query OK, 0 rows affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0

Zdaj to preverite v tabeli.

mysql> show columns from minttec; 

+------------+-------------+------+-----+---------+-------+ 
| Field      | Type        | Null | Key | Default | Extra | 
+------------+-------------+------+-----+---------+-------+ 
| id         | int(3)      | YES  |     | NULL    |       | 
| first_name | varchar(15) | YES  |     | NULL    |       | 
| last_name  | varchar(20) | YES  |     | NULL    |       | 
| email      | varchar(20) | YES  |     | NULL    |       | 
+------------+-------------+------+-----+---------+-------+ 

4 rows in set (0.00 sec) 

mysql>

Zdaj bomo na desni strani e-pošte dodali stolpec, recimo stolpec "država".

mysql> ALTER TABLE minttec ADD country varchar (15) AFTER email; 
Query OK, 0 rows affected (0.16 sec) 
Records: 0  Duplicates: 0  Warnings: 0 

mysql>

Preverite zgornjo poizvedbo za vstavljanje stolpcev.

mysql> show columns from minttec; 

+------------+-------------+------+-----+---------+-------+ 
| Field      | Type        | Null | Key | Default | Extra | 
+------------+-------------+------+-----+---------+-------+
| id         | int(3)      | YES  |     | NULL    |       | 
| first_name | varchar(15) | YES  |     | NULL    |       | 
| last_name  | varchar(20) | YES  |     | NULL    |       | 
| email      | varchar(20) | YES  |     | NULL    |       | 
| country    | varchar(15) | YES  |     | NULL    |       | 
+------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec) 

mysql>

Kaj pa vstavljanje vrednosti v polje?

mysql> INSERT INTO minttec VALUES ('1' , 'Ravi' , 'Saive' , '[email ' , 'India' );
Query OK, 1 row affected (0.02 sec) 

mysql>

Kaj pa, če v zgornjo tabelo vstavite več kot 1 vrednost hkrati.

mysql> INSERT INTO minttec VALUES ('2' , 'Narad' , 'Shrestha' , '[email ' , 'India' ), ('3' , 'user' , 'singh' , '[email ' , 'Aus' ), ('4' , 'tecmint' , '[dot]com' , '[email ' , 'India' );
Query OK, 3 rows affected (0.05 sec) 
Records: 3  Duplicates: 0  Warnings: 0

Preverite zgornji vstavek.

mysql> select * from minttec; 
+------+------------+-----------+-------------------+---------+ 
| id   | first_name | last_name | email             | country | 
+------+------------+-----------+-------------------+---------+ 
|    1 | Ravi	    | Saive     | [email  | India   | 
|    2 | Narad      | Shrestha  | [email      | India   | 
|    3 | user       | singh     | [email       | Aus     | 
|    4 | tecmint    | [dot]com  | [email  | India   | 
+------+------------+-----------+-------------------+---------+ 

4 rows in set (0.00 sec)

mysql>

Recimo, da je tretji vnos v zgornjem izhodu neveljaven, tretji vnos pa moramo izbrisati.

mysql> DELETE FROM minttec WHERE id = 3;

Query OK, 1 row affected (0.02 sec)

Preverite zgornjo operacijo.

mysql> select * from minttec;

+------+------------+-----------+-------------------+---------+ 
| id   | first_name | last_name | email             | country | 
+------+------------+-----------+-------------------+---------+
|    1 | Ravi       | Saive     | [email  | India   | 
|    2 | Narad      | Shrestha  | [email      | India   | 
|    4 | tecmint    | [dot]com  | [email  | India   | 
+------+------------+-----------+-------------------+---------+
3 rows in set (0.00 sec)

Id (= 4) je treba urediti.

mysql> UPDATE minttec SET id = 3 WHERE first_name = 'tecmint'; 
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

Preverite zgornjo poizvedbo.

mysql> UPDATE minttec SET id = 3 WHERE first_name = 'tecmint'; 
Query OK, 1 row affected (0.02 sec) 
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

Opomba: Zgoraj navedena poizvedba ni dobra ideja. ID bo spremenil v '4', kjer je vedno ime 'tecmint'. Vedno je dobro uporabiti več kot en stolpec s klavzulo where, da dobite minimalno napako, kot je:

mysql> UPDATE minttec SET id = 6 WHERE first_name = 'tecmint'AND last_name = '[dot]com'; 
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

Naj spustimo (izbrišemo) stolpec, za katerega mislimo, da tukaj ni pomembno, recimo "država".

mysql> ALTER TABLE minttec drop country; 
Query OK, 3 rows affected (0.15 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql>

Preverite tabelo.

mysql> select * from minttec; 

+------+------------+-----------+-------------------+ 
| id   | first_name | last_name | email             | 
+------+------------+-----------+-------------------+ 
|    1 | Ravi       | Saive     | [email  | 
|    2 | Narad      | Shrestha  | [email      | 
|    6 | tecmint    | [dot]com  | [email  | 
+------+------------+-----------+-------------------+
3 rows in set (0.00 sec) 

mysql>

Se vam ne zdi, da ime naše tabele "minttec" ni preveč relevantno. Kaj pa, če ga spremenite v tecmint_table.

mysql> RENAME TABLE minttec TO tecmint_table; 
Query OK, 0 rows affected (0.03 sec)

mysql>

Oglejte si vse tabele pod trenutno bazo podatkov.

mysql> show tables; 

+-------------------+ 
| Tables_in_tecmint | 
+-------------------+ 
| tecmint_table     | 
+-------------------+
1 row in set (0.00 sec) 

mysql>

Tabela je bila preimenovana. Zdaj vzemite varnostno kopijo zgornje baze podatkov MySQL v eni vrstici ukaza brez kakršnega koli naprednega orodja. Zaženite spodnjo kodo na terminalu in ne v pozivu mysql.

# mysqldump -u root -p tecmint > tecmint.sql

check the dumped file on your desktop which would have contents something like
-- MySQL dump 10.13  Distrib 5.5.31, for debian-linux-gnu (i686) --
-- Server version 5.5.31-0+wheezy1 -- 
Dump completed on 2013-09-02 12:55:37

Vedno je dobra ideja vzdrževati varnostne kopije baz podatkov MySQL. Obnovitev varnostno kopiranih podatkov MySQL je spet preprosta vrstica kode, ki jo morate zagnati v pozivu terminala in ne v pozivu mysql.

Toda najprej počakajte, da bomo izbrisali bazo podatkov, da preverimo, ali je obnovitev popolna.

mysql> drop database tecmint; 
Query OK, 1 row affected (0.02 sec)

Preverite, ali je na vašem strežniku baze podatkov „tecmint“.

mysql> show databases; 

+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| my_database        | 
| mysql              | 
| performance_schema | 
| phpmyadmin         | 
| sisso              | 
| test               | 
+--------------------+

7 rows in set (0.00 sec) 
mysql>

Super! Baza podatkov je izgubljena, vendar nas ni treba skrbeti, imamo varnostno kopijo.

Če želite obnoviti izgubljeno bazo podatkov, zaženite naslednji ukaz.

# mysql -u root -p tecmint < tecmint.sql
Enter password:
ERROR 1049 (42000): Unknown database 'tecmint'

OOPS! Napaka, hej, baze podatkov tecmint nismo ustvarili. Torej, pojdite na poziv mysql in ustvarite bazo podatkov "tecmint".

mysql> create database tecmint; 
Query OK, 1 row affected (0.00 sec) 

mysql>

Zdaj je čas, da zaženete ukaz za obnovitev v pozivu lupine (strogo).

# mysql -u root -p tecmint < tecmint.sql 
Enter password:

Preverite svojo zbirko podatkov.

mysql> show databases; 

+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| mysql              | 
| performance_schema | 
| tecmint            | 
| test               | 
+--------------------+ 
8 rows in set (0.00 sec)

Preverite vsebino baze podatkov.

mysql> show tables from tecmint;

+-------------------+ 
| Tables_in_tecmint | 
+-------------------+ 
| tecmint_table     | 
+-------------------+ 
1 row in set (0.00 sec)

mysql>

Preverite vsebino obnovljene tabele.

mysql> select * from tecmint_table; 

+------+------------+-----------+-------------------+ 
| id   | first_name | last_name | email             | 
+------+------------+-----------+-------------------+ 
|    1 | Ravi       | Saive     | [email  | 
|    2 | Narad      | Shrestha  | [email      | 
|    6 | tecmint    | [dot]com  | [email  | 
+------+------------+-----------+-------------------+

3 rows in set (0.00 sec)

To vsekakor še ni konec, koncept primarnega ključa, tujega ključa, več tabel in izvajanje poizvedb bomo z uporabo preprostega PHP skripta zajeli v naslednjem delu članka.

Ne pozabite nam povedati, kako ste se počutili med pregledom članka. Vaši komentarji so zelo cenjeni. Ostanite zdravi in nastavljeni, ostanite povezani s Tecmintom.