Täze başlanlar üçin MySQL/MariaDB öwreniň - 1-nji bölüm


Bu makalada maglumatlar binýadyny (shema hem diýilýär), tablisalary (maglumatlar görnüşleri bilen) nädip döretmelidigini we MySQL/MariaDB serwerindäki maglumatlar bilen Maglumatlary dolandyrmak dili (DML) amallaryny nädip ýerine ýetirmelidigini düşündireris.

Öň 1) Linux ulgamyňyza zerur paketleri gurnadyňyz we 2) maglumat bazasynyň serweriniň howpsuzlygyny ýokarlandyrmak üçin mysql_secure_installation ýerine ýetirdiňiz öýdülýär. Notok bolsa, MySQL/MariaDB serwerini gurmak üçin aşakdaky gollanmalara eýeriň.

  1. Linux ulgamlarynda iň soňky MySQL maglumat bazasyny guruň
  2. Linux ulgamlarynda iň soňky MariaDB maglumat bazasyny guruň

Tizligi üçin, diňe şu makalanyň dowamynda MariaDB-e ýüz tutarys, ýöne bu ýerde beýan edilen düşünjeler we buýruklar MySQL-a hem degişlidir.

Maglumatlar bazalaryny, tablisalary we ygtyýarly ulanyjylary döretmek

Bilşiňiz ýaly, maglumat bazasy guramaçylykly maglumat ýygyndysy hökmünde ýönekeý sözler bilen kesgitlenip bilner. Hususan-da, MariaDB baglanyşyk bazasyny dolandyrmak ulgamy (RDBMS) bolup, maglumat bazalarynda amallary ýerine ýetirmek üçin Gurluş talaplary dilini ulanýar. Mundan başga-da, MariaDB maglumatlar bazasy we shema terminlerini biri-biri bilen ulanýandygyny ýadyňyzdan çykarmaň.

Dowamly maglumatlary maglumat bazasynda saklamak üçin, hatar maglumatlary saklaýan tablisalary ulanarys. Köplenç iki ýa-da has köp tablisa belli bir derejede biri-biri bilen baglanyşykly bolar. Baglanyşyk maglumat bazalarynyň ulanylmagyny häsiýetlendirýän guramanyň bir bölegi.

BooksDB atly täze maglumat bazasyny döretmek üçin aşakdaky buýruk bilen MariaDB haýyşyny giriziň (kök MariDB ulanyjysynyň parolyny girizmegiňiz soralar):

 mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.14-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> CREATE DATABASE BookstoreDB;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> 

Maglumat bazasy döredilenden soň, üstünde azyndan iki tablisa döretmeli. Emma ilki bilen maglumatlaryň görnüşleri düşünjesini öwreneliň.

MariaDB maglumat görnüşleri bilen tanyşdyrmak

Öň düşündirşimiz ýaly, tablisalar dowamly maglumatlary saklaýan maglumatlar bazasydyr. Her tablisada berlen maglumat görnüşiniň (maglumat görnüşi) iki ýa-da has köp meýdan (sütün diýlip hem atlandyrylýar) bar.

MariaDB-de iň köp ýaýran maglumatlar görnüşleri aşakdakylardyr (doly sanawy MariaDB onlaýn onlaýn resminamalarynda gözläp bilersiňiz):

  1. BOOLEAN 0-ny ýalan we beýleki gymmatlyklary dogry hasaplaýar.
  2. TINYINT, SIGNED bilen ulanylsa -128 bilen 127 aralygy öz içine alýar, UNSIGNED diapazony 0-255 aralygy.
  3. SMALLINT, SIGNED bilen ulanylsa -32768 bilen 32767 aralygy öz içine alýar. UNSIGNED diapazony 0 bilen 65535 aralygy.
  4. INT, UNSIGNED bilen ulanylsa, 0 bilen 4294967295 aralygy, -2147483648 bilen 2147483647 aralygy öz içine alýar.

Bellik: TINYINT, SMALLINT we INT-de deslapky SIGNED kabul edilýär.

DOUBLE (M, D), bu ýerde M sanlaryň umumy sany we D onluk nokatdan soň sanlaryň sany, iki takyklyk ýüzýän nokat sanyny görkezýär. UNSIGNED görkezilen bolsa, negatiw bahalara ýol berilmeýär.

  1. WARCHAR (M) üýtgeýän uzynlygyň setirini aňladýar, bu ýerde M baýtda iň ýokary rugsat berlen sütün uzynlygy (teoriýa boýunça 65,535). Köp halatlarda, 3 baýt alyp bilýän käbir nyşanlardan başga, baýtlaryň sany simwollaryň sany bilen birmeňzeşdir. Mysal üçin, ispan harpy bir harpy aňladýar, ýöne 2 baýt alýar.
  2. TEXT (M) iň uzynlygy 65,535 simwoldan ybarat sütüni aňladýar. Şeýle-de bolsa, VARCHAR (M) bilen bolşy ýaly, köp baýtly simwollar saklansa, iň ýokary uzynlygy azalýar. M görkezilen bolsa, sütün şunuň ýaly nyşanlary saklap bilýän iň kiçi görnüş hökmünde döredilýär.
  3. MEDIUMTEXT (M) we LONGTEXT (M) TEXT (M) bilen meňzeş, diňe rugsat berlen iň uzynlyklaryň degişlilikde 16,777,215 we 4,294,967,295 simwol bolmagydyr.

  1. Sene senäni YYYY-MM-DD formatda görkezýär.
  2. WAGT HH-de wagty aňladýar: MM: SS.sss formaty (sagat, minut, sekunt we millisekunt).
  3. DATETIME - YYYY-MM-DD HH: MM: SS formatda SANA we WAGTY of birleşmesi.
  4. TIMESTAMP hatar goşulan ýa-da täzelenen pursady kesgitlemek üçin ulanylýar.

Maglumatlaryň görnüşlerini gözden geçireniňizden soň, tablisadaky berlen sütüne haýsy maglumat görnüşini bellemelidigiňizi kesgitlemek has gowy bolar.

Mysal üçin, adamyň ady VARCHAR (50) -e aňsatlyk bilen gabat gelip biler, blog ýazgysyna bolsa tekst görnüşi gerek bolar (aýratyn zerurlyklaryňyza görä M saýlaň).

Tablisalary döretmäge başlamazdan ozal baglanyşyk maglumatlar bazalary barada iki esasy düşünje bar, gözden geçirmeli: esasy we daşary ýurt açarlary.

Esasy açar, tablisadaky her hatary ýa-da ýazgyny özboluşly kesgitleýän bahany öz içine alýar. Beýleki tarapdan, iki tablisadaky maglumatlaryň arasynda baglanyşyk döretmek we daşary ýurt açary ýerleşýän tablisada saklanyp bilinjek maglumatlary dolandyrmak üçin daşary ýurt açary ulanylýar. Esasy we daşary ýurt açarlary, köplenç INT-lerdir.

Mysal üçin, geliň, BookstoreDB ulanalyň we aşakdaky ýaly AuthorsTBL we BooksTBL atly iki tablisany döredeliň. NOT NULL çäklendirmesi baglanyşykly meýdanyň NULL-dan başga bahany talap edýändigini görkezýär.

Şeýle hem, AUTO_INCREMENT täze ýazgy tablisa girizilende INT esasy açar sütünleriniň bahasyny bir ýokarlandyrmak üçin ulanylýar.

MariaDB [(none)]> USE BookstoreDB;

MariaDB [(none)]> CREATE TABLE AuthorsTBL (
AuthorID INT NOT NULL AUTO_INCREMENT,
AuthorName VARCHAR(100),
PRIMARY KEY(AuthorID)
);

MariaDB [(none)]> CREATE TABLE BooksTBL (
BookID INT NOT NULL AUTO_INCREMENT,
BookName VARCHAR(100) NOT NULL,
AuthorID INT NOT NULL,
BookPrice DECIMAL(6,2) NOT NULL,
BookLastUpdated TIMESTAMP,
BookIsAvailable BOOLEAN,
PRIMARY KEY(BookID),
FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID)
);
MariaDB [(none)]> USE BookstoreDB;
Database changed
MariaDB [BookstoreDB]> CREATE TABLE AuthorsTBL (
    -> AuthorID INT NOT NULL AUTO_INCREMENT,
    -> AuthorName VARCHAR(100),
    -> PRIMARY KEY(AuthorID)
    -> );
Query OK, 0 rows affected (0.05 sec)

MariaDB [BookstoreDB]> CREATE TABLE BooksTBL (
    -> BookID INT NOT NULL AUTO_INCREMENT,
    -> BookName VARCHAR(100) NOT NULL,
    -> AuthorID INT NOT NULL,
    -> BookPrice DECIMAL(6,2) NOT NULL,
    -> BookLastUpdated TIMESTAMP,
    -> BookIsAvailable BOOLEAN,
    -> PRIMARY KEY(BookID),
    -> FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID)
    -> );
Query OK, 0 rows affected (0.05 sec)

MariaDB [BookstoreDB]> 

Indi öňe gidip, AuthorsTBL we BooksTBL ýazgylary girizip başlap bileris.

Ilki bilen AuthorsTBL tablisasyny doldurarys. Näme üçin? KitapTBL-de ýazgylary goýmazdan ozal AuthorID üçin bahalarymyz bolmaly.

MariaDB haýyşyňyzdan aşakdaky soragy ýerine ýetiriň:

MariaDB [BookstoreDB]> INSERT INTO AuthorsTBL (AuthorName) VALUES ('Agatha Christie'), ('Stephen King'), ('Paulo Coelho');

Ondan soň, AuthorsTBL-den ähli ýazgylary saýlarys. BooksTBL üçin INSERT talapyny döretmek üçin her ýazgy üçin AuthorID gerek boljakdygyny ýadyňyzdan çykarmaň.

Bir gezekde bir ýazgy almak isleseňiz, yzyna gaýtarylmak üçin bir hataryň gabat gelmelidigini görkezýän WHERE maddasyny ulanyp bilersiňiz. Mysal üçin,

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';

Ativea-da bolmasa, ähli ýazgylary bir wagtda saýlap bilersiňiz:

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';
+----------+-----------------+
| AuthorID | AuthorName      |
+----------+-----------------+
|        1 | Agatha Christie |
+----------+-----------------+
1 row in set (0.00 sec)

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;
+----------+-----------------+
| AuthorID | AuthorName      |
+----------+-----------------+
|        1 | Agatha Christie |
|        2 | Stephen King    |
|        3 | Paulo Coelho    |
+----------+-----------------+
3 rows in set (0.00 sec)

MariaDB [BookstoreDB]>

Indi, her kitabyň awtoryna laýyk gelýän AuthorID-i ulanyp, KitapTBL üçin INSERT talapyny döredeliň. BookIsAvailable-de 1 bahasy kitabyň bardygyny görkezýär, başgaça 0:

MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable)
VALUES ('And Then There Were None', 1, 14.95, 1),
('The Man in the Brown Suit', 1, 23.99, 1),
('The Stand', 2, 35.99, 1),
('Pet Sematary', 2, 17.95, 0),
('The Green Mile', 2, 29.99, 1),
('The Alchemist', 3, 25, 1),
('By the River Piedra I Sat Down and Wept', 3, 18.95, 0);
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable)
    -> VALUES ('And Then There Were None', 1, 14.95, 1),
    -> ('The Man in the Brown Suit', 1, 23.99, 1),
    -> ('The Stand', 2, 35.99, 1),
    -> ('Pet Sematary', 2, 17.95, 0),
    -> ('The Green Mile', 2, 29.99, 1),
    -> ('The Alchemist', 3, 25, 1),
    -> ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0);
Query OK, 7 rows affected (0.03 sec)
Records: 7  Duplicates: 0  Warnings: 0

Bu pursatda, KitapTBL-de ýazgylary görmek üçin SELECT ederis. Geliň, Paulo Coelho-nyň\Alhimik bahasyny täzeläliň we bu aýratyn ýazgyny täzeden saýlalyň.

“BookLastUpdated” meýdançasynyň indi başga bir bahany görkezýändigine üns beriň. Öň düşündirşimiz ýaly, TIMESTAMP meýdançasy ýazgy goýlanda ýa-da soňky gezek üýtgedilende bahany görkezýär.

MariaDB [BookstoreDB]> SELECT * FROM BooksTBL;
MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6;
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL;
+--------+-----------------------------------------+----------+-----------+---------------------+-----------------+
| BookID | BookName                                | AuthorID | BookPrice | BookLastUpdated     | BookIsAvailable |
+--------+-----------------------------------------+----------+-----------+---------------------+-----------------+
|      1 | And Then There Were None                |        1 |     14.95 | 2016-10-01 23:31:41 |               1 |
|      2 | The Man in the Brown Suit               |        1 |     23.99 | 2016-10-01 23:31:41 |               1 |
|      3 | The Stand                               |        2 |     35.99 | 2016-10-01 23:31:41 |               1 |
|      4 | Pet Sematary                            |        2 |     17.95 | 2016-10-01 23:31:41 |               0 |
|      5 | The Green Mile                          |        2 |     29.99 | 2016-10-01 23:31:41 |               1 |
|      6 | The Alchemist                           |        3 |     25.00 | 2016-10-01 23:31:41 |               1 |
|      7 | By the River Piedra I Sat Down and Wept |        3 |     18.95 | 2016-10-01 23:31:41 |               0 |
+--------+-----------------------------------------+----------+-----------+---------------------+-----------------+
7 rows in set (0.00 sec)

MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;
+--------+---------------+----------+-----------+---------------------+-----------------+
| BookID | BookName      | AuthorID | BookPrice | BookLastUpdated     | BookIsAvailable |
+--------+---------------+----------+-----------+---------------------+-----------------+
|      6 | The Alchemist |        3 |     22.75 | 2016-10-01 23:35:00 |               1 |
+--------+---------------+----------+-----------+---------------------+-----------------+
1 row in set (0.00 sec)

MariaDB [BookstoreDB]> 

Bu ýerde etmesek-de, indi ulanylmasa ýazgyny pozup bilersiňiz. Mysal üçin, KitapTBL-den\Alhimik -i pozmak isleýäris öýdýän.

Munuň üçin DELETE jümlesini aşakdaky ýaly ulanarys:

MariaDB [BookstoreDB]> DELETE FROM BooksTBL WHERE BookID=6;

UPDATE ýagdaýynda bolşy ýaly, DELETE täsir edip biljek ýazgylary (ýazgylary) görmek üçin ilki bilen SELECT etmek gowy zat.

Şeýle hem, aýryljak anyk ýazgyny saýlamak üçin WHERE maddasyny we şerti (BookID=6) goşmagy ýatdan çykarmaň. Otherwiseogsam, tablisadaky ähli hatarlary ýok etmek howpuny başdan geçirýärsiňiz!

Iki (ýa-da has köp) meýdançany birleşdirmek isleseňiz, CONCAT jümlesini ulanyp bilersiňiz. Mysal üçin, kitabyň ady we awtory\Alhimik (Paulo Coelho) görnüşindäki bir meýdandan we bahasy bilen başga bir sütünden gaýtarylmak isleýäris.

Iki tablisanyň (AuthorID) paýlaşýan umumy meýdanynda AuthorsTBL we BooksTBL arasynda JOIN gerek bolar:

MariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID;

Görşümiz ýaly, CONCAT bize dyngy bilen bölünen birnäçe setir aňlatmalara goşulmaga mümkinçilik berýär. Şeýle hem, birleşmäniň netijeler toplumyny görkezmek üçin lakamly lakamy saýlandygymyzy görersiňiz.

Aboveokardaky talapyň netijesi aşakdaky suratda görkezilýär:

MariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID;
+--------------------------------------------------------+-----------+
| Description                                            | BookPrice |
+--------------------------------------------------------+-----------+
| And Then There Were None (Agatha Christie)             |     14.95 |
| The Man in the Brown Suit (Agatha Christie)            |     23.99 |
| The Stand (Stephen King)                               |     35.99 |
| Pet Sematary (Stephen King)                            |     17.95 |
| The Green Mile (Stephen King)                          |     29.99 |
| The Alchemist (Paulo Coelho)                           |     25.00 |
| By the River Piedra I Sat Down and Wept (Paulo Coelho) |     18.95 |
+--------------------------------------------------------+-----------+
7 rows in set (0.00 sec)

Maglumat bazasyndaky ähli DML amallaryny ýerine ýetirmek üçin kök ulanmak erbet pikir. Munuň öňüni almak üçin, täze MariaDB ulanyjy hasaby döredip bileris (biz oňa kitap dükany diýeris) we BookstoreDB üçin ähli rugsatlary belläp bileris:

MariaDB [BookstoreDB]> CREATE USER [email  IDENTIFIED BY 'YourPasswordHere';
MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON  BookstoreDB.* to [email ;
MariaDB [BookstoreDB]> FLUSH PRIVILEGES;
MariaDB [BookstoreDB]> CREATE USER [email  IDENTIFIED BY 'tecmint';
Query OK, 0 rows affected (0.00 sec)

MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON  BookstoreDB.* to [email ;
Query OK, 0 rows affected (0.00 sec)

MariaDB [BookstoreDB]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Her bir maglumat bazasy üçin aýratyn, aýratyn ulanyjynyň bolmagy, bir hasap bozulan halatynda ähli maglumatlar bazasyna zeper ýetmeginiň öňüni alar.

MariaDB haýyşyny arassalamak üçin aşakdaky buýrugy ýazyň we Enter basyň:

MariaDB [BookstoreDB]> \! clear

Berlen tablisanyň konfigurasiýasyny barlamak üçin:

MariaDB [BookstoreDB]> SELECT COLUMNS IN [TABLE NAME HERE ];

Mysal üçin,

MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;
+-----------------+--------------+------+-----+-------------------+-----------------------------+
| Field           | Type         | Null | Key | Default           | Extra                       |
+-----------------+--------------+------+-----+-------------------+-----------------------------+
| BookID          | int(11)      | NO   | PRI | NULL              | auto_increment              |
| BookName        | varchar(100) | NO   |     | NULL              |                             |
| AuthorID        | int(11)      | NO   | MUL | NULL              |                             |
| BookPrice       | decimal(6,2) | NO   |     | NULL              |                             |
| BookLastUpdated | timestamp    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| BookIsAvailable | tinyint(1)   | YES  |     | NULL              |                             |
+-----------------+--------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.02 sec)

Çalt gözden geçirmek, BookIsAvailable meýdançasynyň NULL bahalaryny kabul edýändigini görkezýär. Muňa rugsat bermek islemeýändigimiz üçin tablisany aşakdaky ýaly üýtgederis:

MariaDB [BookstoreDB]> ALTER TABLE BooksTBL MODIFY BookIsAvailable BOOLEAN NOT NULL;

(Sütünleri täzeden görkezmek üçin arkaýyn boluň - ýokardaky suratdaky görkezilen HAES indi NOOK bolmaly).

Netijede, serweriňizdäki ähli maglumat bazalaryny görmek üçin:

MariaDB [BookstoreDB]> SHOW DATABASES;
OR
MariaDB [BookstoreDB]> SHOW SCHEMAS;
 mysql -u bookstoreuser -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.14-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [BookstoreDB]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| BookstoreDB        |
| information_schema |
+--------------------+
2 rows in set (0.00 sec)

MariaDB [BookstoreDB]> SHOW SCHEMAS;
+--------------------+
| Database           |
+--------------------+
| BookstoreDB        |
| information_schema |
+--------------------+
2 rows in set (0.00 sec)

Aşakdaky surat, kitap dükany hökmünde MariaDB haýyşyna gireniňizden soň ýokardaky buýrugyň netijesini görkezýär (BookstoreDB we maglumat_ shema (ähli ulanyjylar üçin elýeterli) maglumat bazasyndan başga maglumat bazalaryny nädip görüp bilmejekdigine üns beriň:

Gysgaça mazmun

Bu makalada DML amallaryny nädip işletmelidigini we MariaDB maglumatlar bazasynda maglumatlar binýadyny, tablisalary we aýratyn ulanyjylary nädip döretmelidigini düşündirdik. Mundan başga-da, ulgam/maglumat bazasynyň dolandyryjysy hökmünde durmuşyňyzy aňsatlaşdyryp biljek birnäçe maslahatlary paýlaşdyk.

  1. MySQL maglumat bazasynyň dolandyryş bölümi - 1
  2. MySQL maglumat bazasynyň dolandyryş bölümi - 2
  3. MySQL öndürijiligini düzmek we optimizasiýa - 3-nji bölüm

Bu makala barada soraglaryňyz bar bolsa, bize habar bermekden çekinmäň! Bize ýetmek üçin aşakdaky düşündiriş formuny ulanyp bilersiňiz.