sql >> Databasteknik >  >> RDS >> Mysql

Lär dig MySQL / MariaDB för nybörjare – del 1

I den här artikeln kommer vi att visa hur man skapar en databas (även känd som ett schema), tabeller (med datatyper) och förklarar hur man utför Data Manipulation Language (DML ) operationer med data på en MySQL / MariaDB server.

Det antas att du tidigare har 1) installerat de nödvändiga paketen på ditt Linux-system och 2) körde mysql_secure_installation för att förbättra databasserverns säkerhet. Om inte, följ nedanstående guider för att installera MySQL/MariaDB-servern.

  1. Installera den senaste MySQL-databasen i Linux-system
  2. Installera den senaste MariaDB-databasen i Linux-system

För korthetens skull kommer vi att hänvisa till MariaDB uteslutande genom hela den här artikeln, men de begrepp och kommandon som beskrivs här gäller för MySQL likaså.

Del 1 :Lär dig MySQL / MariaDB för nybörjare Del 2 :Lär dig hur du använder flera funktioner i MySQL och MariaDB

Skapa databaser, tabeller och auktoriserade användare

Som ni vet kan en databas i enkla termer definieras som en organiserad insamling av information. Särskilt MariaDB är ett relationsdatabashanteringssystem (RDBMS ) och använder Structure Query Language för att utföra operationer på databaser. Tänk dessutom på att MariaDB använder termerna databas och schema omväxlande.

För att lagra beständig information i en databas kommer vi att använda tabeller som lagrar rader med data. Ofta kommer två eller flera tabeller att vara relaterade till varandra på något sätt. Det är en del av den organisation som kännetecknar användningen av relationsdatabaser.

Skapa en ny databas

För att skapa en ny databas med namnet BooksDB , ange MariaDB-prompten med följande kommando (du kommer att bli ombedd att ange lösenordet för MariaDB-rotanvändaren):

[[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 väl har skapats måste vi skapa minst två tabeller på den. Men låt oss först utforska konceptet med datatyper.

Vi presenterar MariaDB-datatyper

Som vi förklarade tidigare, tabeller är databasobjekt där vi kommer att behålla beständig information. Varje tabell består av två eller flera fält (även känd som kolumner ) av en given datatyp (den typ av information) som ett sådant fält kan lagra.

De vanligaste datatyperna i MariaDB är följande (du kan konsultera hela listan i den officiella MariaDB online-dokumentationen):

Numerisk:
  1. BOOLEAN betraktar 0 som falskt och alla andra värden som sanna.
  2. TINYINT , om den används med SIGNED, täcker intervallet från -128 till 127, medan UNSIGNED-intervallet är 0 till 255.
  3. SMALLINT , om den används med SIGNED, täcker intervallet från -32768 till 32767. UNSIGNED-intervallet är 0 till 65535.
  4. INT , om den används med UNSIGNED, täcker intervallet från 0 till 4294967295 och -2147483648 till 2147483647 annars.

Obs :I TINYINT, SMALLINT och INT antas standardvärdet SIGNED.

DUBBLA(M, D) , där M är det totala antalet siffror och D är antalet siffror efter decimalkomma, representerar ett flyttal med dubbel precision. Om UNSIGNED anges, tillåts inte negativa värden.

Sträng:
  1. VARCHAR(M) representerar en sträng med variabel längd där M är den maximalt tillåtna kolumnlängden i byte (65 535 i teorin). I de flesta fall är antalet byte identiskt med antalet tecken, förutom vissa tecken som kan ta upp så mycket som 3 byte. Till exempel representerar den spanska bokstaven ñ ett tecken men tar upp 2 byte.
  2. TEXT(M) representerar en kolumn med en maximal längd på 65 535 tecken. Men som det händer med VARCHAR(M) , reduceras den faktiska maximala längden om flerbytetecken lagras. Om M anges skapas kolumnen som den minsta typen som kan lagra ett sådant antal tecken.
  3. MEDIUMTEXT(M) och LONGTEXT(M) liknar TEXT(M) , bara att de maximalt tillåtna längderna är 16 777 215 respektive 4 294 967 295 tecken.
Datum och tid:
  1. DATE representerar datumet i ÅÅÅÅ-MM-DD format.
  2. TID representerar tiden i TT:MM:SS.sss format (timmar, minuter, sekunder och millisekunder).
  3. DATETIME är kombinationen av DATE och TID i ÅÅÅÅ-MM-DD TT:MM:SS format.
  4. TIDSSTÄMPEL används för att definiera när en rad lades till eller uppdaterades.

Efter att ha granskat dessa datatyper kommer du att ha bättre förutsättningar att avgöra vilken datatyp du behöver tilldela en viss kolumn i en tabell.

Till exempel kan en persons namn lätt passa in i en VARCHAR(50) , medan ett blogginlägg behöver en TEXT typ (välj M enligt dina specifika behov).

Skapa tabeller med primära och främmande nycklar

Innan vi fördjupar oss i att skapa tabeller finns det två grundläggande begrepp om relationsdatabaser som vi måste granska:primär och utländska nycklar.

En primär nyckel innehåller ett värde som unikt identifierar varje rad, eller post, i tabellen. Å andra sidan, en främmande nyckel används för att skapa en länk mellan data i två tabeller, och för att kontrollera data som kan lagras i tabellen där den främmande nyckeln finns. Både primära och främmande nycklar är i allmänhet INT.

För att illustrera, låt oss använda BookstoreDB och skapa två tabeller med namnet AuthorsTBL och BooksTBL som följer. NOT NULL begränsning anger att det associerade fältet kräver ett annat värde än NULL .

Även AUTO_INCREMENT används för att öka värdet på INT med ett primärnyckelkolumner när en ny post infogas 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)
);
Skapa MySQL-tabeller med primär och främmande nyckel
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å vidare och börja infoga poster i AuthorsTBL och BooksTBL .

Välja, infoga, uppdatera och ta bort rader

Vi kommer först att fylla i AuthorsTBL tabell. Varför? Eftersom vi måste ha värden för AuthorID innan du infogar poster i BooksTBL .

Kör följande fråga från din MariaDB-prompt:

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

Efter det kommer vi att välja alla poster från AuthorsTBL . Kom ihåg att vi behöver AuthorID för varje post för att skapa INSERT fråga för BooksTBL .

Om du vill hämta en post i taget kan du använda en WHERE klausul för att ange ett villkor som en rad måste uppfylla för att kunna returneras. Till exempel,

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

Alternativt kan du välja alla poster samtidigt:

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;
Välj och fråga post 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]>

Låt oss nu skapa INSERT fråga för BooksTBL , med motsvarande AuthorID att matcha författaren till varje bok. Ett värde på 1 i BookIsAvailable anger att boken finns i lager, 0 annars:

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);
Infoga fråga i MySQL-tabell
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

Vid det här laget gör vi en SELECT för att se posterna i BooksTBL . Låt oss sedan UPPDATERA priset för "Alkemisten ” av Paulo Coelho och VÄLJ den specifika posten igen.

Notera hur BookLastUpdated fältet visar nu ett annat värde. Som vi förklarade tidigare, en TIMESTAMP fältet visar värdet när posten infogades eller senast ändrades.

MariaDB [BookstoreDB]> SELECT * FROM BooksTBL;
MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6;
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;
Infoga fråga och uppdatera tabell i MySQL-databasen
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]> 

Även om vi inte kommer att göra det här, kan du också radera en post om den inte används längre. Anta till exempel att vi vill ta bort "Alkemisten ” från BooksTBL .

För att göra det använder vi RADERA uttalande enligt följande:

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

Som i fallet med UPPDATERING , är det en bra idé att göra en SELECT först för att se post(er) som potentiellt kan påverkas av RADERA .

Glöm inte heller att lägga till VAR sats och ett villkor (BookID=6) för att välja den specifika post som ska tas bort. Annars riskerar du att radera alla rader i tabellen!

Om du vill sammanfoga två (eller flera) fält kan du använda CONCAT påstående. Låt oss till exempel säga att vi vill returnera en resultatuppsättning som består av ett fält med bokens namn och författare i form av "Alkemisten (Paulo Coelho) ” och ytterligare en kolumn med priset.

Detta kräver en JOIN mellan AutorsTBL och BooksTBL på det gemensamma fältet som delas av båda tabellerna (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 tillåter oss att sammanfoga flera stränguttryck separerade med kommatecken. Du kommer också att märka att vi valde aliaset Beskrivning för att representera resultatuppsättningen av sammanlänkningen.

Utdata från ovanstående fråga visas i bilden nedan:

Fråga flera fält i MySQL-tabell
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)

Skapa användare för åtkomst till BookstoreDB-databasen

Använder root för att utföra all DML operationer i en databas är en dålig idé. För att undvika detta kan vi skapa en ny MariaDB användarkonto (vi kallar det bokhandelsanvändare ) och tilldela alla nödvändiga behörigheter för BookstoreDB :

MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'YourPasswordHere';
MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON  BookstoreDB.* to [email protected];
MariaDB [BookstoreDB]> FLUSH PRIVILEGES;
Skapa ny databasanvändare med rättigheter
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)

Att ha en dedikerad, separat användare för varje databas kommer att förhindra skador på hela databasen om ett enskilt konto skulle äventyras.

Extra MySQL-tips

För att rensa upp MariaDB skriv följande kommando och tryck på Retur :

MariaDB [BookstoreDB]> \! clear

För att inspektera konfigurationen av en given tabell, gör:

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

Till exempel,

MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;
Lista kolumner i databastabell
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 snabb inspektion avslöjar att boken är tillgänglig fältet medger NULL värden. Eftersom vi inte vill tillåta det, kommer vi att ÄNDRA tabellen enligt följande:

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

(Visa gärna kolumnerna igen – det markerade JA i bilden ovan ska nu vara ett NEJ ).

Slutligen, för att se alla databaser på din server, gör du:

MariaDB [BookstoreDB]> SHOW DATABASES;
OR
MariaDB [BookstoreDB]> SHOW SCHEMAS;
Lista alla 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öljande bild visar resultatet av kommandot ovan efter att ha öppnat MariaDB-prompten som bokhandelsanvändare (observera hur det här kontot inte kan "se" några andra databaser än BookstoreDB och informationsschema (tillgängligt för alla användare):

Sammanfattning

I den här artikeln har vi förklarat hur du kör DML operationer och hur man skapar en databas, tabeller och dedikerade användare på en MariaDB-databas. Dessutom delade vi med oss ​​av några tips som kan göra ditt liv som system-/databasadministratör enklare.

  1. MySQL Databas Administration Del – 1
  2. MySQL Databas Administration Del – 2
  3. MySQL Performance Tunning och optimering – Del 3

Om du har några frågor om den här artikeln, tveka inte att meddela oss! Använd gärna kommentarsformuläret nedan för att nå oss.


  1. Vad är kardinalitet i MySQL?

  2. Oracle SQL Developer strängen bokstavligt talat för lång fel

  3. Varför kan jag inte använda kolumnalias i nästa SELECT-uttryck?

  4. SQL Server:Dynamisk where-klausul