Tgħallem MySQL/MariaDB għall-Bidu - Parti 1


F'dan l-artikolu ser nuru kif toħloq database (magħrufa wkoll bħala skema), tabelli (b'tipi ta 'dejta), u nispjegaw kif twettaq operazzjonijiet tal-Lingwa ta' Manipulazzjoni tad-Data (DML) b'dejta fuq server MySQL/MariaDB.

Huwa preżunt li qabel 1) installajt il-pakketti meħtieġa fuq is-sistema Linux tiegħek, u 2) eżegwijt mysql_secure_installation biex ittejjeb is-sigurtà tas-server tad-database. Jekk le, segwi hawn taħt gwidi biex tinstalla server MySQL/MariaDB.

  1. Installa l-Latest MySQL Database fis-Sistemi Linux
  2. Installa l-Latest MariaDB Database fis-Sistemi Linux

Għall-qosor, se nirreferu għal MariaDB esklussivament matul dan l-artikolu, iżda l-kunċetti u l-kmandi deskritti hawn japplikaw għal MySQL ukoll.

Ħolqien ta' Databases, Tabelli, u Utenti Awtorizzati

Kif tafu, database tista' tiġi definita f'termini sempliċi bħala ġabra organizzata ta' informazzjoni. B'mod partikolari, MariaDB hija sistema ta 'ġestjoni tad-database relazzjonali (RDBMS) u tuża l-Lingwa ta' Mistoqsija tal-Istruttura biex twettaq operazzjonijiet fuq databases. Barra minn hekk, iżomm f'moħħu li MariaDB juża t-termini database u schema b'mod interkambjabbli.

Biex taħżen informazzjoni persistenti f'database, se nużaw tabelli li jaħżnu ringieli ta 'data. Ħafna drabi, żewġ tabelli jew aktar ikunu relatati ma 'xulxin b'xi mod. Dik hija parti mill-organizzazzjoni li tikkaratterizza l-użu ta 'databases relazzjonali.

Biex toħloq database ġdida bl-isem BooksDB, daħħal il-prompt ta' MariaDB bil-kmand li ġej (inti tkun imħeġġa biex iddaħħal il-password għall-utent tal-għerq MariaDB):

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

Ladarba d-database tkun inħolqot, irridu noħolqu mill-inqas żewġ tabelli fuqha. Imma l-ewwel ejja nesploraw il-kunċett tat-tipi tad-dejta.

L-introduzzjoni tat-Tipi tad-dejta MariaDB

Kif spjegajna qabel, it-tabelli huma oġġetti tad-database fejn se nżommu informazzjoni persistenti. Kull tabella tikkonsisti f'żewġ oqsma jew aktar (magħrufa wkoll bħala kolonni) ta' tip ta' dejta partikolari (it-tip ta' informazzjoni) li tali qasam jista' jaħżen.

L-aktar tipi ta' dejta komuni f'MariaDB huma dawn li ġejjin (tista' tikkonsulta l-lista kompluta fid-dokumentazzjoni uffiċjali onlajn ta' MariaDB):

  1. BOOLEAN iqis 0 bħala falz u kwalunkwe valur ieħor bħala veru.
  2. TINYINT, jekk jintuża ma' SIGNED, ikopri l-medda minn -128 sa 127, filwaqt li l-medda UNSIGNED hija minn 0 sa 255.
  3. SMALLINT, jekk jintuża ma' SIGNED, ikopri l-medda minn -32768 sa 32767. Il-medda UNISIGNED hija minn 0 sa 65535.
  4. INT, jekk jintuża ma' UNSIGNED, ikopri l-firxa minn 0 sa 4294967295, u -2147483648 sa 2147483647 mod ieħor.

Nota: F'TINYINT, SMALLINT, u INT, is-SIGNED default huwa preżunt.

DOUBLE(M, D), fejn M huwa n-numru totali ta 'ċifri u D huwa n-numru ta' ċifri wara l-punt deċimali, jirrappreżenta numru b'punt li jvarja bi preċiżjoni doppja. Jekk MHUX FISMAT huwa speċifikat, valuri negattivi mhumiex permessi.

  1. VARCHAR(M) tirrappreżenta string ta' tul varjabbli fejn M huwa t-tul massimu permess tal-kolonna f'bytes (65,535 fit-teorija). Fil-biċċa l-kbira tal-każijiet, in-numru ta 'bytes huwa identiku għan-numru ta' karattri, ħlief għal xi karattri li jistgħu jieħdu sa 3 bytes. Pereżempju, l-ittra Spanjola ñ tirrappreżenta karattru wieħed iżda tieħu 2 bytes.
  2. TEXT(M) jirrappreżenta kolonna b'tul massimu ta' 65,535 karattru. Madankollu, kif jiġri b'VARCHAR(M), it-tul massimu attwali jitnaqqas jekk jinħażnu karattri b'ħafna byte. Jekk M hija speċifikata, il-kolonna tinħoloq bħala l-iżgħar tip li jista' jaħżen tali numru ta' karattri.
  3. MEDIUMTEXT(M) u LONGTEXT(M) huma simili għal TEXT(M), biss li t-tulijiet massimi permessi huma 16,777,215 u 4,294,967,295 karattru, rispettivament.

  1. DATA tirrappreżenta d-data fil-format SSSS-XX-JJ.
  2. ĦIN jirrappreżenta l-ħin fil-format HH:MM:SS.sss (siegħa, minuti, sekondi, u millisekondi).
  3. DATETIME hija l-kombinazzjoni ta' DATA u ĦIN fil-format SSSS-XX-JJ HH:MM:SS.
  4. TIMESTAMP huwa użat biex jiddefinixxi l-mument li ringiela ġiet miżjuda jew aġġornata.

Wara li tkun irrevediet dawn it-tipi ta' dejta, tkun f'pożizzjoni aħjar biex tiddetermina liema tip ta' dejta għandek bżonn tassenja lil kolonna partikolari f'tabella.

Pereżempju, isem ta’ persuna jista’ faċilment jidħol f’VARCHAR(50), filwaqt li post tal-blog ikollu bżonn tip TEXT (agħżel M skont il-bżonnijiet speċifiċi tiegħek).

Qabel ma ngħaddu fil-ħolqien ta 'tabelli, hemm żewġ kunċetti fundamentali dwar databases relazzjonali li rridu nirrevedu: ċwievet primarji u barranin.

Ċavetta primarja fiha valur li jidentifika b'mod uniku kull ringiela, jew rekord, fit-tabella. Min-naħa l-oħra, ċavetta barranija tintuża biex toħloq rabta bejn id-dejta f'żewġ tabelli, u biex tikkontrolla d-dejta li tista 'tinħażen fit-tabella fejn tinsab iċ-ċavetta barranija. Kemm ċwievet primarji kif ukoll barranin huma ġeneralment INTs.

Biex nagħtu eżempju, ejja nużaw il-BookstoreDB u noħolqu żewġ tabelli bl-isem AuthorsTBL u BooksTBL kif ġej. Ir-restrizzjoni NOT NULL tindika li l-qasam assoċjat jeħtieġ valur ieħor għajr NULL.

Ukoll, AUTO_INCREMENT jintuża biex jiżdied b'wieħed il-valur tal-kolonni taċ-ċavetta primarja INT meta rekord ġdid jiddaħħal fit-tabella.

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

Issa nistgħu nimxu 'l quddiem u nibdew indaħħlu r-rekords f'AuthorsTBL u BooksTBL.

L-ewwel se timla t-tabella AuthorsTBL. Għaliex? Minħabba li jeħtieġ li jkollna valuri għal AuthorID qabel ma ndaħħlu r-rekords fil-BooksTBL.

Esegwi l-mistoqsija li ġejja mill-pront ta' MariaDB tiegħek:

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

Wara dan, aħna se nagħżlu r-rekords kollha minn AuthorsTBL. Ftakar li ser ikollna bżonn l-AuthorID għal kull rekord biex noħolqu l-mistoqsija INSERT għal BooksTBL.

Jekk trid tirkupra rekord wieħed kull darba, tista' tuża klawżola WHERE biex tindika kundizzjoni li ringiela trid tissodisfa biex tiġi rritornata. Pereżempju,

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

Inkella, tista' tagħżel ir-rekords kollha simultanjament:

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

Issa ejja noħolqu l-mistoqsija INSERT għal BooksTBL, billi tuża l-AuthorID korrispondenti biex tqabbel l-awtur ta 'kull ktieb. Valur ta' 1 f'BookIsAvailable jindika li l-ktieb huwa fl-istokk, 0 inkella:

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

F'dan il-punt se nagħmlu SELECT biex naraw ir-rekords f'BooksTBL. Imbagħad ejja Aġġornaw il-prezz ta '\The Alchemist ta' Paulo Coelho u AGĦŻEL dak ir-rekord speċifiku mill-ġdid.

Innota kif il-qasam BookLastUpdated issa juri valur differenti. Kif spjegajna qabel, qasam TIMESTAMP juri l-valur meta r-rekord iddaħħal jew ġie modifikat l-aħħar.

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

Għalkemm mhux se nagħmluha hawn, tista 'wkoll tħassar rekord jekk ma tintużax aktar. Pereżempju, ngħidu li rridu nħassru \The Alchemist minn BooksTBL.

Biex nagħmlu dan, se nużaw id-dikjarazzjoni DELETE kif ġej:

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

Bħal fil-każ ta 'AĠĠORNAMENT, hija idea tajba li tagħmel SELECT l-ewwel sabiex tara r-rekord(i) li jistgħu potenzjalment jiġu affettwati mill-ĦASSAR.

Ukoll, tinsiex iżżid il-klawżola WHERE u kundizzjoni (BookID=6) biex tagħżel ir-rekord speċifiku li għandu jitneħħa. Inkella, għandek ir-riskju li tħassar ir-ringieli kollha fit-tabella!

Jekk tixtieq tikkonkatena żewġ (jew aktar) oqsma, tista' tuża l-istqarrija CONCAT. Pereżempju, ejja ngħidu li rridu nirritornaw sett ta 'riżultati li jikkonsisti f'qasam wieħed bl-isem tal-ktieb u l-awtur fil-forma ta' \The Alchemist (Paulo Coelho) u kolonna oħra bil-prezz.

Dan se jeħtieġ JOIN bejn AuthorsTBL u BooksTBL fuq il-qasam komuni kondiviż miż-żewġ tabelli (AuthorID):

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

Kif nistgħu naraw, CONCAT jippermettilna li ningħaqdu espressjonijiet multipli string separati b'virgoli. Tinnota wkoll li għażilna l-alias Deskrizzjoni biex tirrappreżenta s-sett tar-riżultati tal-konkatenazzjoni.

L-output tal-mistoqsija ta 'hawn fuq tidher fl-immaġni ta' hawn taħt:

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)

L-użu tal-għeruq biex iwettaq l-operazzjonijiet DML kollha f'database hija idea ħażina. Biex nevitaw dan, nistgħu noħolqu kont ġdid tal-utent MariaDB (se nsemmuh bookstoreuser) u nassenjaw il-permessi kollha meħtieġa għal 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 ;
Query OK, 0 rows affected (0.00 sec)

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

Li jkollok utent dedikat u separat għal kull database jipprevjeni ħsarat lid-database kollha jekk kont wieħed ikun kompromess.

Biex tnaddaf il-pront ta' MariaDB, ikteb il-kmand li ġej u agħfas Enter:

MariaDB [BookstoreDB]> \! clear

Biex tispezzjona l-konfigurazzjoni ta 'tabella partikolari, agħmel:

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

Pereżempju,

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)

Spezzjoni mgħaġġla tiżvela li l-qasam BookIsAvailable jammetti valuri NULL. Peress li ma rridux nippermettu dan, aħna se Nbiddlu t-tabella kif ġej:

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

(Ħossok liberu li turi l-kolonni mill-ġdid - l-IVA enfasizzata fl-immaġni ta 'hawn fuq issa għandha tkun LE).

Fl-aħħarnett, biex tara d-databases kollha fuq is-server tiegħek, agħmel:

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)

L-immaġni li ġejja turi r-riżultat tal-kmand ta 'hawn fuq wara li taċċessa l-pront ta' MariaDB bħala l-utent tal-ħanut tal-kotba (innota kif dan il-kont ma jistax \jara xi databases għajr BookstoreDB u information_schema (disponibbli għall-utenti kollha):

Sommarju

F'dan l-artikolu spjegajna kif tmexxi operazzjonijiet DML u kif toħloq database, tabelli, u utenti ddedikati fuq database MariaDB. Barra minn hekk, qsamna ftit suġġerimenti li jistgħu jagħmlulek ħajtek bħala amministratur tas-sistema/database aktar faċli.

  1. Parti tal-Amministrazzjoni tad-Database MySQL – 1
  2. Parti tal-Amministrazzjoni tad-Database MySQL – 2
  3. Irfinar u Ottimizzazzjoni tal-Prestazzjoni ta' MySQL – Parti 3

Jekk għandek xi mistoqsijiet dwar dan l-artikolu, toqgħodx lura milli tgħarrafna! Ħossok liberu li tuża l-formola tal-kummenti hawn taħt biex tilħaqna.