Pagkat-on sa MySQL/MariaDB alang sa mga Nagsugod - Bahin 1


Niining artikuloha ipakita namo kung unsaon paghimo og database (nailhan usab nga schema), mga lamesa (nga adunay mga tipo sa datos), ug ipasabut kung giunsa paghimo ang mga operasyon sa Data Manipulation Language (DML) nga adunay data sa MySQL/MariaDB server.

Gituohan nga kaniadto 1) imong gi-install ang gikinahanglan nga mga pakete sa imong Linux system, ug 2) gipatuman ang mysql_secure_installation aron mapauswag ang seguridad sa database server. Kung dili, sunda ang mga giya sa ubos aron ma-install ang MySQL/MariaDB server.

  1. I-install ang Pinakabag-o nga MySQL Database sa Linux Systems
  2. I-install ang Pinakabag-o nga MariaDB Database sa Linux Systems

Alang sa mubo, maghisgot kami sa MariaDB nga eksklusibo sa tibuuk nga artikulo, apan ang mga konsepto ug mga mando nga gilatid dinhi magamit usab sa MySQL.

Paghimo og mga Databases, Tables, ug Awtorisado nga mga Gumagamit

Sama sa imong nahibal-an, ang usa ka database mahimong ipasabut sa yano nga mga termino ingon usa ka organisado nga koleksyon sa kasayuran. Ilabi na, ang MariaDB usa ka relational database management system (RDBMS) ug naggamit sa Structure Query Language aron mahimo ang mga operasyon sa mga database. Dugang pa, hinumdomi nga ang MariaDB naggamit sa mga termino nga database ug schema nga baylobaylo.

Aron tipigan ang padayon nga impormasyon sa usa ka database, mogamit kami og mga lamesa nga nagtipig sa mga laray sa datos. Kasagaran, duha o daghan pa nga mga lamesa adunay kalabutan sa usag usa sa usa ka paagi. Kabahin kana sa organisasyon nga nagpaila sa paggamit sa mga relational database.

Aron makahimo og bag-ong database nga ginganlan og BooksDB, isulod ang MariaDB prompt uban sa mosunod nga sugo (ikaw maaghat sa pagsulod sa password alang sa gamut MariaDB user):

 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)]> 

Kung nahimo na ang database, kinahanglan namong maghimo ug labing menos duha ka lamesa niini. Apan una natong susihon ang konsepto sa mga tipo sa datos.

Pagpaila sa MariaDB Data Types

Sama sa among gipatin-aw sa sayo pa, ang mga lamesa mao ang mga butang sa database diin kami magtipig kanunay nga kasayuran. Ang matag lamesa naglangkob sa duha o daghan pa nga mga natad (nailhan usab nga mga kolum) sa usa ka gihatag nga tipo sa datos (ang tipo sa kasayuran) nga mahimo nga tipigan sa ingon nga natad.

Ang labing kasagaran nga mga tipo sa datos sa MariaDB mao ang mga musunud (mahimo nimong konsultahon ang kompleto nga lista sa opisyal nga dokumentasyon sa online nga MariaDB):

  1. Gikonsiderar sa BOOLEAN ang 0 nga bakak ug bisan unsang ubang mga kantidad nga tinuod.
  2. TINYINT, kon gamiton uban sa SIGNED, naglangkob sa range gikan sa -128 ngadto sa 127, samtang ang UNSIGNED range mao ang 0 ngadto sa 255.
  3. SMALLINT, kon gamiton uban sa SIGNED, naglangkob sa range gikan sa -32768 ngadto sa 32767. Ang UNSIGNED range mao ang 0 ngadto sa 65535.
  4. INT, kon gamiton uban sa UNSIGNED, naglangkob sa range gikan sa 0 ngadto sa 4294967295, ug -2147483648 ngadto sa 2147483647 kon dili.

Mubo nga sulat: Sa TINYINT, SMALLINT, ug INT, ang default nga SIGNED gituohan.

DOBLE(M, D), diin ang M mao ang kinatibuk-ang gidaghanon sa mga digit ug D ang gidaghanon sa mga digit human sa decimal nga punto, nagrepresentar sa double-precision floating-point nga numero. Kung UNSIGNED ang gipiho, ang mga negatibo nga kantidad dili tugutan.

  1. VARCHAR(M) nagrepresentar sa usa ka string sa variable nga gitas-on diin ang M mao ang pinakataas nga gitugotan nga kolum nga gitas-on sa bytes (65,535 sa teorya). Sa kadaghanan nga mga kaso, ang gidaghanon sa mga byte parehas sa gidaghanon sa mga karakter, gawas sa pipila ka mga karakter nga mahimong mokabat ug 3 ka byte. Pananglitan, ang Espanyol nga letra ñ nagrepresentar sa usa ka karakter apan adunay 2 byte.
  2. TEXT(M) nagrepresentar sa usa ka kolum nga adunay pinakataas nga gitas-on nga 65,535 ka karakter. Apan, sama sa nahitabo sa VARCHAR(M), ang aktuwal nga kinatas-ang gitas-on mapakunhod kung ang multi-byte nga mga karakter gitipigan. Kung M ang gipiho, ang kolum gihimo isip pinakagamay nga tipo nga makatipig sa ingon nga gidaghanon sa mga karakter.
  3. MEDIUMTEXT(M) ug LONGTEXT(M) susama sa TEXT(M), pero ang pinakataas nga gitugot nga gitas-on kay 16,777,215 ug 4,294,967,295 ka karakter, matag usa.

  1. DATE nagrepresentar sa petsa sa YYYY-MM-DD nga pormat.
  2. TIME nagrepresentar sa oras sa HH:MM:SS.sss format (oras, minuto, segundos, ug milliseconds).
  3. DATETIME mao ang kombinasyon sa DATE ug TIME sa YYYY-MM-DD HH:MM:SS format.
  4. Ang TIMESTAMP gigamit sa pagpasabot sa higayon nga ang usa ka laray gidugang o gi-update.

Human masusi kini nga mga tipo sa datos, naa ka sa mas maayo nga posisyon aron mahibal-an kung unsang tipo sa datos ang kinahanglan nimo nga i-assign sa usa ka gihatag nga kolum sa usa ka lamesa.

Pananglitan, ang ngalan sa usa ka tawo dali nga mohaum sa usa ka VARCHAR(50), samtang ang usa ka post sa blog magkinahanglan usa ka klase nga TEXT (pilia ang M sumala sa imong piho nga mga panginahanglanon).

Sa dili pa kita mosalom sa paghimo og mga lamesa, adunay duha ka sukaranan nga mga konsepto bahin sa relational database nga kinahanglan natong susihon: panguna ug langyaw nga mga yawe.

Ang usa ka panguna nga yawe adunay usa ka kantidad nga talagsaon nga nagpaila sa matag laray, o rekord, sa lamesa. Sa laing bahin, ang usa ka langyaw nga yawe gigamit sa paghimo og usa ka sumpay tali sa mga datos sa duha ka mga lamesa, ug aron makontrol ang datos nga mahimong tipigan sa lamesa diin nahimutang ang langyaw nga yawe. Ang panguna ug langyaw nga mga yawe kasagaran mga INT.

Sa pag-ilustrar, atong gamiton ang BookstoreDB ug maghimo ug duha ka lamesa nga ginganlan og AuthorsTBL ug BooksTBL ingon sa mosunod. Ang NOT NULL constraint nagpaila nga ang kaubang field nagkinahanglan ug value gawas sa NULL.

Usab, ang AUTO_INCREMENT gigamit aron madugangan og usa ang bili sa INT primary key columns kung ang usa ka bag-ong rekord gisal-ot sa lamesa.

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]> 

Karon kita makapadayon ug magsugod sa pagsal-ot sa mga rekord ngadto sa AuthorsTBL ug BooksTBL.

Among ibutang una ang AuthorsTBL nga lamesa. Ngano man? Tungod kay kinahanglan kita adunay mga kantidad alang sa AuthorID sa dili pa isulod ang mga rekord sa BooksTBL.

Ipatuman ang mosunod nga pangutana gikan sa imong MariaDB prompt:

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

Human niana, pilion namo ang tanang mga rekord gikan sa AuthorsTBL. Hinumdumi nga kinahanglan namon ang AuthorID sa matag rekord aron mahimo ang INSERT nga pangutana alang sa BooksTBL.

Kung gusto nimong bawion ang usa ka rekord matag higayon, mahimo nimong gamiton ang usa ka WHERE clause aron ipakita ang usa ka kondisyon nga ang usa ka laray kinahanglan magtagbo aron mabalik. Pananglitan,

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

Sa laing paagi, mahimo nimong pilion ang tanan nga mga rekord nga dungan:

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]>

Karon atong mugnaon ang INSERT nga pangutana para sa BooksTBL, gamit ang katugbang nga AuthorID aron ipares ang tagsulat sa matag libro. Ang kantidad nga 1 sa BookIsAvailable nagpakita nga ang libro naa sa stock, 0 kung dili:

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

Niini nga punto maghimo kami usa ka PILI aron makita ang mga rekord sa BooksTBL. Dayon atong I-UPDATE ang presyo sa \The Alchemist ni Paulo Coelho ug PILI pag-usab ang piho nga rekord.

Timan-i kung giunsa ang natad sa BookLastUpdated karon nagpakita sa usa ka lahi nga kantidad. Sama sa among gipatin-aw sa sayo pa, ang usa ka TIMESTAMP field nagpakita sa bili sa dihang ang rekord gisal-ot o katapusan nga giusab.

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]> 

Bisan tuod dili namo kini buhaton dinhi, mahimo usab nimong papason ang usa ka rekord kon dili na gamiton. Pananglitan, ibutang ta nga gusto natong papason ang \The Alchemist gikan sa BooksTBL.

Aron mahimo kini, among gamiton ang DELETE nga pahayag sama sa mosunod:

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

Sama sa kaso sa UPDATE, maayo nga ideya nga buhaton una ang PILI aron matan-aw ang (mga) rekord nga mahimo’g maapektuhan sa DELETE.

Usab, ayaw kalimti ang pagdugang sa WHERE clause ug usa ka kondisyon (BookID = 6) aron mapili ang piho nga rekord nga tangtangon. Kung dili, adunay peligro nga matangtang ang tanan nga mga laray sa lamesa!

Kung gusto nimo nga maghiusa sa duha (o daghan pa) nga mga natad, mahimo nimong gamiton ang pahayag sa CONCAT. Pananglitan, ingnon ta nga gusto namong ibalik ang usa ka set sa resulta nga naglangkob sa usa ka field nga adunay ngalan sa libro ug awtor sa porma sa \The Alchemist (Paulo Coelho) ug laing column nga adunay presyo.

Nagkinahanglan kini og JOIN tali sa AuthorsTBL ug BooksTBL sa komon nga field nga gipaambit sa duha ka lamesa (AuthorID):

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

Sama sa among nakita, ang CONCAT nagtugot kanamo sa pag-apil sa daghang mga ekspresyon sa string nga gibulag sa mga koma. Mamatikdan usab nimo nga gipili namo ang alyas nga Deskripsyon aron magrepresentar sa resulta nga set sa concatenation.

Ang output sa pangutana sa ibabaw gipakita sa ubos nga hulagway:

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)

Ang paggamit sa gamut aron mahimo ang tanan nga mga operasyon sa DML sa usa ka database usa ka dili maayo nga ideya. Aron malikayan kini, makahimo kita og bag-ong MariaDB user account (atong nganlan kini og bookstoreuser) ug i-assign ang tanang gikinahanglang permiso para sa BookstoreDB:

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 calhost;
Query OK, 0 rows affected (0.00 sec)

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

Ang pagbaton ug dedikado, bulag nga user alang sa matag database makapugong sa mga kadaot sa tibuok database kon ang usa ka account makompromiso.

Aron malimpyohan ang prompt sa MariaDB, i-type ang mosunod nga sugo ug pindota ang Enter:

MariaDB [BookstoreDB]> \! clear

Aron masusi ang configuration sa usa ka lamesa, buhata ang:

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

Pananglitan,

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)

Ang usa ka dali nga pag-inspeksyon nagpadayag nga ang natad sa BookIsAvailable miangkon sa NULL nga mga kantidad. Tungod kay dili namo gusto nga tugotan kana, usbon namo ang lamesa sama sa mosunod:

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

(Mobati nga gawasnon sa pagpakita sa mga kolum pag-usab - ang gipasiugda nga OO sa ibabaw nga hulagway kinahanglan na karon nga usa ka DILI).

Sa katapusan, aron makita ang tanan nga mga database sa imong server, buhata:

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)

Ang mosunod nga hulagway nagpakita sa resulta sa sugo sa ibabaw human ma-access ang MariaDB prompt isip bookstore user (timan-i kon sa unsang paagi kini nga account dili makakita sa bisan unsang mga database gawas sa BookstoreDB ug information_schema (anaa alang sa tanang tiggamit):

Summary

Niini nga artikulo among gipatin-aw kung giunsa pagpadagan ang mga operasyon sa DML ug kung giunsa paghimo ang usa ka database, mga lamesa, ug gipahinungod nga tiggamit sa usa ka database sa MariaDB. Dugang pa, gipaambit namo ang pipila ka mga tip nga mahimo’g mapadali ang imong kinabuhi ingon usa ka tagdumala sa sistema/database.

  1. Bahin sa Pagdumala sa MySQL Database - 1
  2. Bahin sa Pagdumala sa MySQL Database – 2
  3. MySQL Performance Tunning and Optimization – Part 3

Kung adunay ka mga pangutana bahin sa kini nga artikulo, ayaw pagpanuko sa pagpahibalo kanamo! Palihug gamita ang comment form sa ubos para maabot mi.