sql >> Database teknologi >  >> RDS >> Mysql

Lær MySQL / MariaDB for begyndere – del 1

I denne artikel vil vi vise, hvordan man opretter en database (også kendt som et skema), tabeller (med datatyper) og forklarer, hvordan man udfører Data Manipulation Language (DML ) operationer med data på en MySQL / MariaDB server.

Det antages, at du tidligere har 1) installeret de nødvendige pakker på dit Linux-system, og 2) udførte mysql_secure_installation for at forbedre databaseserverens sikkerhed. Hvis ikke, følg nedenstående vejledninger for at installere MySQL/MariaDB-serveren.

  1. Installer den seneste MySQL-database i Linux-systemer
  2. Installer den seneste MariaDB-database i Linux-systemer

For kortheds skyld vil vi henvise til MariaDB udelukkende i hele denne artikel, men de begreber og kommandoer, der er skitseret her, gælder for MySQL også.

Del 1 :Lær MySQL / MariaDB for begyndere Del 2 :Lær hvordan du bruger flere funktioner i MySQL og MariaDB

Oprettelse af databaser, tabeller og autoriserede brugere

Som du ved, kan en database i enkle vendinger defineres som en organiseret indsamling af information. Især MariaDB er et relationelt databasestyringssystem (RDBMS ) og bruger Structure Query Language til at udføre operationer på databaser. Derudover skal du huske på, at MariaDB bruger termerne database og skema i flæng.

For at gemme vedvarende information i en database, vil vi bruge tabeller der gemmer rækker af data. Ofte vil to eller flere tabeller være relateret til hinanden på en eller anden måde. Det er en del af den organisation, der kendetegner brugen af ​​relationelle databaser.

Oprettelse af en ny database

For at oprette en ny database ved navn BooksDB , indtast MariaDB-prompten med følgende kommando (du bliver bedt om at indtaste adgangskoden til MariaDB-rodbrugeren):

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

Når databasen er oprettet, skal vi lave mindst to tabeller på den. Men lad os først undersøge begrebet datatyper.

Introduktion af MariaDB-datatyper

Som vi forklarede tidligere, tabeller er databaseobjekter, hvor vi opbevarer vedvarende information. Hver tabel består af to eller flere felter (også kendt som kolonner). ) af en given datatype (den type information), som et sådant felt kan gemme.

De mest almindelige datatyper i MariaDB er følgende (du kan se den komplette liste i den officielle MariaDB online dokumentation):

Numerisk:
  1. BOOLEAN betragter 0 som falsk og alle andre værdier som sande.
  2. TINYINT , hvis det bruges sammen med SIGNED, dækker området fra -128 til 127, mens UNSIGNED-området er 0 til 255.
  3. SMALLINT , hvis det bruges sammen med SIGNED, dækker området fra -32768 til 32767. USIGNED-området er 0 til 65535.
  4. INT , hvis det bruges sammen med UNSIGNED, dækker området fra 0 til 4294967295 og -2147483648 til 2147483647 ellers.

Bemærk :I TINYINT, SMALLINT og INT antages standard SIGNED.

DOUBLE(M, D) , hvor M er det samlede antal cifre og D er antallet af cifre efter decimalkommaet, repræsenterer et flydende decimaltal med dobbelt præcision. Hvis UNSIGNED er angivet, tillades negative værdier ikke.

String:
  1. VARCHAR(M) repræsenterer en streng med variabel længde, hvor M er den maksimalt tilladte kolonnelængde i bytes (65.535 i teorien). I de fleste tilfælde er antallet af bytes identisk med antallet af tegn, bortset fra nogle tegn, der kan fylde så meget som 3 bytes. For eksempel repræsenterer det spanske bogstav ñ ét tegn, men fylder 2 bytes.
  2. TEKST(M) repræsenterer en kolonne med en maksimal længde på 65.535 tegn. Men som det sker med VARCHAR(M) , reduceres den faktiske maksimale længde, hvis der gemmes multibyte-tegn. Hvis M er angivet, oprettes kolonnen som den mindste type, der kan gemme et sådant antal tegn.
  3. MEDIUMTEXT(M) og LONGTEXT(M) ligner TEXT(M) , kun at de maksimalt tilladte længder er henholdsvis 16.777.215 og 4.294.967.295 tegn.
Dato og tid:
  1. DATO repræsenterer datoen i ÅÅÅÅ-MM-DD format.
  2. TID repræsenterer tiden i TT:MM:SS.sss format (time, minutter, sekunder og millisekunder).
  3. DATETIME er kombinationen af ​​DATE og TID i ÅÅÅÅ-MM-DD TT:MM:SS format.
  4. TIMESTAMP bruges til at definere det øjeblik, en række blev tilføjet eller opdateret.

Efter at have gennemgået disse datatyper, vil du være i en bedre position til at bestemme, hvilken datatype du skal tildele til en given kolonne i en tabel.

For eksempel kan en persons navn nemt passe ind i en VARCHAR(50) , hvorimod et blogindlæg skal bruge en TEKST type (vælg M efter dine specifikke behov).

Oprettelse af tabeller med primære og fremmede nøgler

Før vi dykker ned i at skabe tabeller, er der to grundlæggende begreber om relationelle databaser, som vi skal gennemgå:primær og udenlandske nøgler.

En primær nøgle indeholder en værdi, der entydigt identificerer hver række eller post i tabellen. På den anden side en fremmednøgle bruges til at skabe et link mellem dataene i to tabeller, og til at styre de data, der kan gemmes i tabellen, hvor fremmednøglen er placeret. Både primære og fremmede nøgler er generelt INT'er.

For at illustrere det, lad os bruge BookstoreDB og opret to tabeller med navnet AuthorsTBL og BooksTBL som følger. IKKE NULL begrænsning angiver, at det tilknyttede felt kræver en anden værdi end NULL .

Også AUTO_INCREMENT bruges til at øge værdien af ​​INT med én primære nøglekolonner, når en ny post indsættes i tabellen.

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)
);
Opret MySQL-tabeller med primær og fremmed nøgle
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 kan vi gå videre og begynde at indsætte poster i AuthorsTBL og BooksTBL .

Valg, indsæt, opdatering og sletning af rækker

Vi vil først udfylde AuthorsTBL bord. Hvorfor? Fordi vi skal have værdier for AuthorID før du indsætter poster i BøgerTBL .

Udfør følgende forespørgsel fra din MariaDB-prompt:

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

Derefter vil vi vælge alle poster fra AuthorsTBL . Husk, at vi skal bruge AuthorID for hver post for at oprette INSERT forespørgsel efter BooksTBL .

Hvis du vil hente én post ad gangen, kan du bruge en Hvor klausul for at angive en betingelse, som en række skal opfylde for at blive returneret. For eksempel,

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

Alternativt kan du vælge alle posterne samtidigt:

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;
Vælg og forespørg optag i 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]>

Lad os nu oprette INSERT forespørgsel efter BooksTBL , ved hjælp af det tilsvarende AuthorID at matche forfatteren til hver bog. En værdi på 1 i BookIsAvailable angiver, at bogen er på lager, 0 ellers:

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);
Indsæt forespørgsel i 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

På dette tidspunkt vil vi lave en SELECT for at se optegnelserne i BooksTBL . Så lad os OPDATERE prisen på "Alkymisten ” af Paulo Coelho og VÆLG den specifikke post igen.

Bemærk, hvordan BookLastUpdated feltet viser nu en anden værdi. Som vi forklarede tidligere, et TIMESTAMP feltet viser værdien, da posten blev indsat eller sidst ændret.

MariaDB [BookstoreDB]> SELECT * FROM BooksTBL;
MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6;
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;
Indsæt forespørgsel og opdater tabel i 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]> 

Selvom vi ikke gør det her, kan du også slette en post, hvis den ikke bruges længere. Antag for eksempel, at vi vil slette "Alkymisten ” fra BooksTBL .

For at gøre det bruger vi SLET erklæring som følger:

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

Som i tilfældet med OPDATERING , er det en god idé at lave en SELECT først for at se de registreringer, der potentielt kan blive påvirket af SLET .

Glem heller ikke at tilføje Hvor klausul og en betingelse (BookID=6) for at vælge den specifikke post, der skal fjernes. Ellers risikerer du at slette alle rækker i tabellen!

Hvis du ønsker at sammenkæde to (eller flere) felter, kan du bruge CONCAT udmelding. Lad os f.eks. sige, at vi ønsker at returnere et resultatsæt, der består af ét felt med bogens navn og forfatter i form af "Alkymisten (Paulo Coelho) ” og en anden kolonne med prisen.

Dette kræver en JOIN mellem AutorsTBL og BooksTBL på det fælles felt, der deles af begge tabeller (AuthorID ):

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

Som vi kan se, CONCAT giver os mulighed for at forbinde flere strengudtryk adskilt af kommaer. Du vil også bemærke, at vi valgte aliaset Beskrivelse for at repræsentere resultatsættet af sammenkædningen.

Outputtet af ovenstående forespørgsel er vist på billedet nedenfor:

Forespørg på flere felter i 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)

Opret bruger for at få adgang til BookstoreDB-databasen

Brug af root for at udføre al DML operationer i en database er en dårlig idé. For at undgå dette kan vi oprette en ny MariaDB brugerkonto (vi kalder den boghandelsbruger ) og tildel alle nødvendige tilladelser til BookstoreDB :

MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'YourPasswordHere';
MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON  BookstoreDB.* to [email protected];
MariaDB [BookstoreDB]> FLUSH PRIVILEGES;
Opret ny databasebruger med rettigheder
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)

At have en dedikeret, separat bruger for hver database vil forhindre skader på hele databasen, hvis en enkelt konto bliver kompromitteret.

Ekstra MySQL-tip

For at rydde op i MariaDB prompt, skriv følgende kommando og tryk på Enter :

MariaDB [BookstoreDB]> \! clear

For at inspicere konfigurationen af ​​en given tabel skal du gøre:

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

For eksempel,

MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;
Liste kolonner i 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)

En hurtig inspektion afslører, at BookIsAvailable felt indrømmer NULL værdier. Da vi ikke ønsker at tillade det, ÆNDR tabellen som følger:

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

(Vis gerne kolonnerne igen – det fremhævede JA i ovenstående billede skulle nu være et NEJ ).

Til sidst, for at se alle databaserne på din server, skal du gøre:

MariaDB [BookstoreDB]> SHOW DATABASES;
OR
MariaDB [BookstoreDB]> SHOW SCHEMAS;
Vis alle MySQL-databaser
[[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)

Følgende billede viser resultatet af ovenstående kommando efter adgang til MariaDB-prompten som boghandelsbrugeren (bemærk, hvordan denne konto ikke kan "se" andre databaser end BookstoreDB og informationsskema (tilgængelig for alle brugere):

Oversigt

I denne artikel har vi forklaret, hvordan du kører DML operationer og hvordan man opretter en database, tabeller og dedikerede brugere på en MariaDB-database. Derudover delte vi et par tips, der kan gøre dit liv som system-/databaseadministrator lettere.

  1. MySQL Database Administration Del – 1
  2. MySQL Database Administration Del – 2
  3. MySQL Performance Tunning og optimering – Del 3

Hvis du har spørgsmål til denne artikel, så tøv ikke med at give os besked! Du er velkommen til at bruge kommentarformularen nedenfor for at nå os.


  1. SQLite MAX

  2. Now() uden tidszone

  3. Rul A tilbage, hvis B går galt. fjederstøvle, jdbctemplate

  4. Annoncering af ClusterControl 1.7.5:Avanceret klyngevedligeholdelse og support til PostgreSQL 12 og MongoDB 4.2