sql >> Database >  >> RDS >> Mysql

Leer MySQL / MariaDB voor beginners - deel 1

In dit artikel laten we zien hoe u een database (ook wel een schema genoemd), tabellen (met gegevenstypen) maakt en uitleggen hoe u Data Manipulation Language uitvoert. (DML ) bewerkingen met gegevens op een MySQL / MariaDB server.

Er wordt aangenomen dat u eerder 1) . heeft gehad installeerde de benodigde pakketten op uw Linux-systeem, en 2) mysql_secure_installation uitgevoerd om de beveiliging van de databaseserver te verbeteren. Als dat niet het geval is, volgt u onderstaande handleidingen om de MySQL/MariaDB-server te installeren.

  1. Installeer de nieuwste MySQL-database in Linux-systemen
  2. Installeer de nieuwste MariaDB-database in Linux-systemen

Kortheidshalve verwijzen we naar MariaDB uitsluitend in dit artikel, maar de concepten en opdrachten die hier worden beschreven, zijn van toepassing op MySQL ook.

Deel 1 :Leer MySQL / MariaDB voor beginners Deel 2 :Leer hoe u verschillende functies van MySQL en MariaDB kunt gebruiken

Databases, tabellen en geautoriseerde gebruikers maken

Zoals u weet, kan een database in eenvoudige bewoordingen worden gedefinieerd als een georganiseerde verzameling informatie. Vooral MariaDB is een relationeel databasebeheersysteem (RDBMS ) en gebruikt de Structure Query Language om bewerkingen op databases uit te voeren. Houd er bovendien rekening mee dat MariaDB de termen database en schema door elkaar gebruikt.

Om persistente informatie in een database op te slaan, gebruiken we tabellen waarin rijen gegevens worden opgeslagen. Vaak zullen twee of meer tabellen op de een of andere manier aan elkaar gerelateerd zijn. Dat is onderdeel van de organisatie die het gebruik van relationele databases kenmerkt.

Een nieuwe database maken

Een nieuwe database maken met de naam BooksDB , voer de MariaDB-prompt in met de volgende opdracht (u wordt gevraagd om het wachtwoord voor de root MariaDB-gebruiker in te voeren):

[[email protected] ~]# 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)]> 

Nadat de database is gemaakt, moeten we er ten minste twee tabellen op maken. Maar laten we eerst eens kijken naar het concept van gegevenstypen.

Introductie van MariaDB-gegevenstypen

Zoals we eerder hebben uitgelegd, tabellen zijn database-objecten waar we blijvende informatie bewaren. Elke tabel bestaat uit twee of meer velden (ook bekend als kolommen ) van een bepaald gegevenstype (het type informatie) dat in een dergelijk veld kan worden opgeslagen.

De meest voorkomende gegevenstypen in MariaDB zijn de volgende (u kunt de volledige lijst raadplegen in de officiële online MariaDB-documentatie):

Numeriek:
  1. BOOLEAN beschouwt 0 als onwaar en alle andere waarden als waar.
  2. TINYINT , indien gebruikt met SIGNED, bestrijkt het bereik van -128 tot 127, terwijl het bereik UNSIGNED 0 tot 255 is.
  3. SMALLINT , indien gebruikt met SIGNED, dekt het bereik van -32768 tot 32767. Het UNSIGNED-bereik is 0 tot 65535.
  4. INT , indien gebruikt met UNSIGNED, dekt het bereik van 0 tot 4294967295 en anders -2147483648 tot 2147483647.

Opmerking :In TINYINT, SMALLINT en INT wordt de standaard SIGNED aangenomen.

DUBBEL(M, D) , waar M is het totale aantal cijfers en D is het aantal cijfers achter de komma, vertegenwoordigt een getal met dubbele precisie met drijvende komma. Als UNSIGNED is opgegeven, zijn negatieve waarden niet toegestaan.

Tekenreeks:
  1. VARCHAR(M) staat voor een string van variabele lengte waarbij M is de maximaal toegestane kolomlengte in bytes (65.535 in theorie). In de meeste gevallen is het aantal bytes gelijk aan het aantal tekens, met uitzondering van enkele tekens die wel 3 bytes in beslag kunnen nemen. De Spaanse letter ñ staat bijvoorbeeld voor één teken, maar neemt 2 bytes in beslag.
  2. TEKST(M) staat voor een kolom met een maximale lengte van 65.535 tekens. Echter, zoals het gebeurt met VARCHAR(M) , wordt de werkelijke maximale lengte verminderd als tekens van meerdere bytes worden opgeslagen. Als M is opgegeven, wordt de kolom gemaakt als het kleinste type dat een dergelijk aantal tekens kan opslaan.
  3. MEDIUMTEKST(M) en LONGTEXT(M) lijken op TEXT(M) , alleen dat de maximaal toegestane lengtes respectievelijk 16.777.215 en 4.294.967.295 tekens zijn.
Datum en tijd:
  1. DATUM staat voor de datum in JJJJ-MM-DD formaat.
  2. TIJD staat voor de tijd in UU:MM:SS.sss formaat (uur, minuten, seconden en milliseconden).
  3. DATETIME is de combinatie van DATE en TIJD in JJJJ-MM-DD UU:MM:SS formaat.
  4. TIMESTAMP wordt gebruikt om het moment te definiëren waarop een rij is toegevoegd of bijgewerkt.

Nadat u deze gegevenstypen hebt bekeken, kunt u beter bepalen welk gegevenstype u aan een bepaalde kolom in een tabel moet toewijzen.

De naam van een persoon past bijvoorbeeld gemakkelijk in een VARCHAR(50) , terwijl een blogpost een TEXT . nodig heeft type (kies M volgens uw specifieke behoeften).

Tabellen maken met primaire en externe sleutels

Voordat we ingaan op het maken van tabellen, zijn er twee fundamentele concepten over relationele databases die we moeten bekijken:primair en buitenlandse toetsen.

Een primaire sleutel bevat een waarde die elke rij of record in de tabel op unieke wijze identificeert. Aan de andere kant, een buitenlandse sleutel wordt gebruikt om een ​​koppeling te maken tussen de gegevens in twee tabellen en om de gegevens te beheren die kunnen worden opgeslagen in de tabel waarin de externe sleutel zich bevindt. Zowel primaire als externe sleutels zijn over het algemeen INT's.

Laten we ter illustratie de BookstoreDB . gebruiken en maak twee tabellen met de naam AuthorsTBL en BooksTBL als volgt. De NIET NULL beperking geeft aan dat het gekoppelde veld een andere waarde vereist dan NULL .

Ook AUTO_INCREMENT wordt gebruikt om de waarde van INT . met één te verhogen primaire sleutelkolommen wanneer een nieuw record in de tabel wordt ingevoegd.

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)
);
Maak MySQL-tabellen met primaire en externe sleutel
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]> 

Nu kunnen we doorgaan en records invoegen in AuthorsTBL en BooksTBL .

Rijen selecteren, invoegen, bijwerken en verwijderen

We vullen eerst de AuthorsTBL tafel. Waarom? Omdat we waarden moeten hebben voor AuthorID voordat u records invoegt in de BooksTBL .

Voer de volgende query uit vanaf uw MariaDB-prompt:

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

Daarna selecteren we alle records van AuteursTBL . Onthoud dat we de AuthorID . nodig hebben voor elke record om de INSERT . te maken zoekopdracht voor BooksTBL .

Als u één record tegelijk wilt ophalen, kunt u een WHERE . gebruiken clausule om een ​​voorwaarde aan te geven waaraan een rij moet voldoen om te worden geretourneerd. Bijvoorbeeld,

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

U kunt ook alle records tegelijk selecteren:

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;
Selecteer en bevraag record in MySQL
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]>

Laten we nu de INSERT . maken zoekopdracht voor BooksTBL , met behulp van de bijbehorende AuthorID om de auteur van elk boek te matchen. Een waarde van 1 in BookIsAvailable geeft aan dat het boek op voorraad is, 0 anders:

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 invoegen in MySQL-tabel
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

Op dit punt doen we een SELECT om de records te zien in BooksTBL . Laten we dan UPDATE de prijs van "De Alchemist ” door Paulo Coelho en SELECTEER dat specifieke record opnieuw.

Merk op hoe de BookLastUpdated veld toont nu een andere waarde. Zoals we eerder hebben uitgelegd, een TIMESTAMP veld toont de waarde toen het record werd ingevoegd of voor het laatst werd gewijzigd.

MariaDB [BookstoreDB]> SELECT * FROM BooksTBL;
MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6;
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;
Query invoegen en tabel bijwerken in MySQL-database
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]> 

Hoewel we het hier niet zullen doen, kunt u een record ook verwijderen als het niet meer wordt gebruikt. Stel dat we bijvoorbeeld "The Alchemist . willen verwijderen ” van BooksTBL .

Om dit te doen, gebruiken we de DELETE verklaring als volgt:

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

Zoals in het geval van UPDATE , is het een goed idee om een ​​SELECT . te doen eerst om de record(s) te bekijken die mogelijk worden beïnvloed door de VERWIJDEREN .

Vergeet ook niet de WHERE . toe te voegen clausule en een voorwaarde (BookID=6) om het specifieke record te selecteren dat moet worden verwijderd. Anders loopt u het risico dat u alle rijen in de tabel verwijdert!

Als u twee (of meer) velden wilt samenvoegen, kunt u de CONCAT . gebruiken uitspraak. Laten we bijvoorbeeld zeggen dat we een resultatenset willen retourneren die bestaat uit één veld met de boeknaam en auteur in de vorm van "The Alchemist (Paulo Coelho) ” en nog een kolom met de prijs.

Hiervoor is een DOEN . vereist tussen AuteursTBL en BoekenTBL op het gemeenschappelijke veld dat door beide tabellen wordt gedeeld (AuthorID ):

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

Zoals we kunnen zien, CONCAT stelt ons in staat om meerdere tekenreeksuitdrukkingen samen te voegen, gescheiden door komma's. Het is je ook opgevallen dat we de alias Description . hebben gekozen om de resultatenset van de aaneenschakeling weer te geven.

De uitvoer van de bovenstaande zoekopdracht wordt weergegeven in de onderstaande afbeelding:

Query uitvoeren op meerdere velden in MySQL-tabel
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)

Gebruiker maken om toegang te krijgen tot de BookstoreDB-database

root gebruiken om alle DML uit te voeren bewerkingen in een database is een slecht idee. Om dit te voorkomen, kunnen we een nieuwe MariaDB . maken gebruikersaccount (we noemen het bookstoreuser ) en wijs alle benodigde machtigingen toe voor BookstoreDB :

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

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

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

Het hebben van een toegewijde, aparte gebruiker voor elke database voorkomt schade aan de hele database als een enkel account gecompromitteerd wordt.

Extra MySQL-tips

Om de MariaDB op te ruimen prompt, typt u de volgende opdracht en drukt u op Enter :

MariaDB [BookstoreDB]> \! clear

Ga als volgt te werk om de configuratie van een bepaalde tabel te inspecteren:

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

Bijvoorbeeld,

MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;
Lijstkolommen in databasetabel
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)

Een snelle inspectie leert dat de BookIsAvailable veld geeft toe NULL waarden. Omdat we dat niet willen toestaan, zullen we VERANDEREN de tabel als volgt:

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

(Voel je vrij om de kolommen opnieuw te tonen – de gemarkeerde JA in de bovenstaande afbeelding zou nu een NEE . moeten zijn ).

Tot slot, om alle databases op uw server te bekijken, doet u:

MariaDB [BookstoreDB]> SHOW DATABASES;
OR
MariaDB [BookstoreDB]> SHOW SCHEMAS;
Lijst met alle MySQL-databases
[[email protected] ~]# 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)

De volgende afbeelding toont het resultaat van de bovenstaande opdracht na toegang tot de MariaDB-prompt als de boekwinkelgebruiker (merk op dat dit account geen andere databases kan "zien" dan BookstoreDB en information_schema (beschikbaar voor alle gebruikers):

Samenvatting

In dit artikel hebben we uitgelegd hoe u DML . uitvoert bewerkingen en het maken van een database, tabellen en toegewijde gebruikers op een MariaDB-database. Daarnaast hebben we een paar tips gedeeld die uw leven als systeem-/databasebeheerder gemakkelijker kunnen maken.

  1. MySQL Database Administration Part – 1
  2. MySQL Database Administration Part – 2
  3. MySQL-prestaties afstemmen en optimaliseren – deel 3

Mocht je naar aanleiding van dit artikel nog vragen hebben, laat het ons dan gerust weten! Voel je vrij om het onderstaande reactieformulier te gebruiken om ons te bereiken.


  1. JSON-functies zijn nu standaard ingeschakeld in SQLite

  2. Hoe verkrijgt u de maximaal mogelijke datum in Oracle?

  3. Maak verbinding met een externe postgresql-server op amazon ec2

  4. Maak een gekoppelde server tussen twee Docker-containers met SQL Server (T-SQL-voorbeeld)