Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Lernen Sie MySQL / MariaDB für Anfänger – Teil 1

In diesem Artikel zeigen wir, wie man eine Datenbank (auch bekannt als Schema) und Tabellen (mit Datentypen) erstellt und erklärt, wie man Data Manipulation Language ausführt (DML ) Operationen mit Daten auf einem MySQL / MariaDB Server.

Es wird davon ausgegangen, dass Sie zuvor 1) hatten die erforderlichen Pakete auf Ihrem Linux-System installiert haben und 2) mysql_secure_installation ausgeführt um die Sicherheit des Datenbankservers zu verbessern. Wenn nicht, befolgen Sie die nachstehenden Anleitungen, um den MySQL/MariaDB-Server zu installieren.

  1. Neueste MySQL-Datenbank in Linux-Systemen installieren
  2. Neueste MariaDB-Datenbank in Linux-Systemen installieren

Der Kürze halber beziehen wir uns auf MariaDB ausschließlich in diesem Artikel, aber die hier beschriebenen Konzepte und Befehle gelten für MySQL auch.

Teil 1 :MySQL / MariaDB für Anfänger lernen Teil 2 :Erfahren Sie, wie Sie mehrere Funktionen von MySQL und MariaDB verwenden

Datenbanken, Tabellen und autorisierte Benutzer erstellen

Wie Sie wissen, kann eine Datenbank vereinfacht als eine organisierte Sammlung von Informationen definiert werden. Insbesondere MariaDB ist ein relationales Datenbankmanagementsystem (RDBMS ) und verwendet die Structure Query Language, um Operationen auf Datenbanken auszuführen. Denken Sie außerdem daran, dass MariaDB die Begriffe Datenbank und Schema synonym verwendet.

Um dauerhafte Informationen in einer Datenbank zu speichern, verwenden wir Tabellen die Datenzeilen speichern. Oft stehen zwei oder mehr Tabellen in irgendeiner Weise miteinander in Beziehung. Das ist Teil der Organisation, die die Verwendung relationaler Datenbanken charakterisiert.

Erstellen einer neuen Datenbank

So erstellen Sie eine neue Datenbank mit dem Namen BooksDB , geben Sie die MariaDB-Eingabeaufforderung mit dem folgenden Befehl ein (Sie werden aufgefordert, das Passwort für den Root-MariaDB-Benutzer einzugeben):

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

Sobald die Datenbank erstellt wurde, müssen wir mindestens zwei Tabellen darauf erstellen. Aber lassen Sie uns zuerst das Konzept der Datentypen untersuchen.

Einführung in MariaDB-Datentypen

Wie wir bereits erklärt haben, Tabellen sind Datenbankobjekte, in denen wir dauerhafte Informationen aufbewahren. Jede Tabelle besteht aus zwei oder mehr Feldern (auch bekannt als Spalten ) eines bestimmten Datentyps (der Art der Informationen), die ein solches Feld speichern kann.

Die häufigsten Datentypen in MariaDB sind die folgenden (Sie können die vollständige Liste in der offiziellen Online-Dokumentation von MariaDB einsehen):

Numerisch:
  1. BOOLEAN betrachtet 0 als falsch und alle anderen Werte als wahr.
  2. TINYINT , wenn es mit SIGNED verwendet wird, deckt den Bereich von -128 bis 127 ab, während der UNSIGNED-Bereich 0 bis 255 ist.
  3. SMALLINT , wenn es mit SIGNED verwendet wird, deckt den Bereich von -32768 bis 32767 ab. Der UNSIGNED-Bereich ist 0 bis 65535.
  4. INT , wenn es mit UNSIGNED verwendet wird, deckt den Bereich von 0 bis 4294967295 und ansonsten -2147483648 bis 2147483647 ab.

Hinweis :Bei TINYINT, SMALLINT und INT wird der Standardwert SIGNED angenommen.

DOPPELT (M, D) , wobei M ist die Gesamtzahl der Ziffern und D ist die Anzahl der Nachkommastellen und stellt eine Gleitkommazahl mit doppelter Genauigkeit dar. Wenn UNSIGNED angegeben ist, sind keine negativen Werte zulässig.

Zeichenfolge:
  1. VARCHAR(M) stellt eine Zeichenfolge variabler Länge dar, wobei M ist die maximal zulässige Spaltenlänge in Byte (theoretisch 65.535). In den meisten Fällen ist die Anzahl der Bytes identisch mit der Anzahl der Zeichen, mit Ausnahme einiger Zeichen, die bis zu 3 Bytes einnehmen können. Beispielsweise stellt der spanische Buchstabe ñ ein Zeichen dar, belegt aber 2 Bytes.
  2. TEXT(M) stellt eine Spalte mit einer maximalen Länge von 65.535 Zeichen dar. Wie es jedoch bei VARCHAR(M) der Fall ist , reduziert sich die tatsächliche maximale Länge, wenn Multibyte-Zeichen gespeichert werden. Wenn M angegeben ist, wird die Spalte als kleinster Typ erstellt, der eine solche Anzahl von Zeichen speichern kann.
  3. MEDIUMTEXT(M) und LONGTEXT(M) ähneln TEXT(M) , nur dass die maximal zulässige Länge 16.777.215 bzw. 4.294.967.295 Zeichen beträgt.
Datum und Uhrzeit:
  1. DATUM steht für das Datum im Format JJJJ-MM-TT formatieren.
  2. ZEIT repräsentiert die Zeit in HH:MM:SS.sss Format (Stunde, Minuten, Sekunden und Millisekunden).
  3. DATETIME ist die Kombination aus DATE und ZEIT im JJJJ-MM-TT HH:MM:SS formatieren.
  4. ZEITSTEMPEL wird verwendet, um den Zeitpunkt zu definieren, an dem eine Zeile hinzugefügt oder aktualisiert wurde.

Nachdem Sie diese Datentypen überprüft haben, können Sie besser bestimmen, welchen Datentyp Sie einer bestimmten Spalte in einer Tabelle zuweisen müssen.

Beispielsweise kann der Name einer Person problemlos in ein VARCHAR(50) passen , wohingegen ein Blogbeitrag einen TEXT benötigt Typ (wählen Sie M nach Ihren spezifischen Bedürfnissen).

Erstellen von Tabellen mit Primär- und Fremdschlüsseln

Bevor wir uns mit dem Erstellen von Tabellen befassen, müssen wir uns mit zwei grundlegenden Konzepten relationaler Datenbanken befassen:primär und fremd Tasten.

Ein Primärschlüssel enthält einen Wert, der jede Zeile oder jeden Datensatz in der Tabelle eindeutig identifiziert. Andererseits ein Fremdschlüssel wird verwendet, um eine Verknüpfung zwischen den Daten in zwei Tabellen herzustellen und um die Daten zu steuern, die in der Tabelle gespeichert werden können, in der sich der Fremdschlüssel befindet. Sowohl Primär- als auch Fremdschlüssel sind im Allgemeinen INTs.

Verwenden wir zur Veranschaulichung die BookstoreDB und erstellen Sie zwei Tabellen mit dem Namen AuthorsTBL und BooksTBL wie folgt. Die NICHT NULL Einschränkung gibt an, dass das zugeordnete Feld einen anderen Wert als NULL erfordert .

Außerdem AUTO_INCREMENT wird verwendet, um den Wert von INT um eins zu erhöhen Primärschlüsselspalten, wenn ein neuer Datensatz in die Tabelle eingefügt wird.

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)
);
Erstellen Sie MySQL-Tabellen mit Primär- und Fremdschlüssel
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]> 

Jetzt können wir fortfahren und mit dem Einfügen von Datensätzen in AuthorsTBL beginnen und BooksTBL .

Zeilen auswählen, einfügen, aktualisieren und löschen

Wir werden zuerst die AuthorsTBL füllen Tisch. Wieso den? Weil wir Werte für AuthorID haben müssen bevor Sie Datensätze in BooksTBL einfügen .

Führen Sie die folgende Abfrage von Ihrer MariaDB-Eingabeaufforderung aus:

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

Danach wählen wir alle Datensätze aus AuthorsTBL aus . Denken Sie daran, dass wir die AuthorID benötigen für jeden Datensatz, um das INSERT zu erstellen Abfrage für BooksTBL .

Wenn Sie jeweils nur einen Datensatz abrufen möchten, können Sie ein WHERE verwenden -Klausel, um eine Bedingung anzugeben, die eine Zeile erfüllen muss, um zurückgegeben zu werden. Zum Beispiel

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

Alternativ können Sie alle Datensätze gleichzeitig auswählen:

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;
Datensatz in MySQL auswählen und abfragen
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]>

Lassen Sie uns nun das INSERT erstellen Abfrage für BooksTBL , indem Sie die entsprechende AuthorID verwenden passend zum Autor jedes Buches. Ein Wert von 1 in BookIsAvailable gibt an, dass das Buch auf Lager ist, 0 ansonsten:

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);
Abfrage in MySQL-Tabelle einfügen
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

An dieser Stelle führen wir ein SELECT durch um die Aufzeichnungen in BooksTBL anzuzeigen . Dann lassen Sie uns AKTUALISIEREN der Preis von „The Alchemist “ von Paulo Coelho und AUSWÄHLEN diesen bestimmten Datensatz noch einmal.

Beachten Sie, wie das BookLastUpdated Feld zeigt jetzt einen anderen Wert. Wie wir bereits erklärt haben, ein TIMESTAMP Feld zeigt den Wert, als der Datensatz eingefügt oder zuletzt geändert wurde.

MariaDB [BookstoreDB]> SELECT * FROM BooksTBL;
MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6;
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;
Abfrage einfügen und Tabelle in MySQL-Datenbank aktualisieren
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]> 

Obwohl wir dies hier nicht tun, können Sie einen Datensatz auch löschen, wenn er nicht mehr verwendet wird. Angenommen, wir möchten „The Alchemist“ löschen ” von BooksTBL .

Dazu verwenden wir das LÖSCHEN Anweisung wie folgt:

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

Wie im Fall von UPDATE , ist es eine gute Idee, ein SELECT durchzuführen zuerst, um die Datensätze anzuzeigen, die möglicherweise von DELETE betroffen sind .

Vergessen Sie auch nicht, das WHERE hinzuzufügen -Klausel und eine Bedingung (BookID=6) um den zu entfernenden Datensatz auszuwählen. Andernfalls laufen Sie Gefahr, alle Zeilen in der Tabelle zu löschen!

Wenn Sie zwei (oder mehr) Felder verketten möchten, können Sie CONCAT verwenden Erklärung. Angenommen, wir möchten eine Ergebnismenge zurückgeben, die aus einem Feld mit dem Buchnamen und dem Autor in Form von „The Alchemist (Paulo Coelho)“ besteht ” und eine weitere Spalte mit dem Preis.

Dazu ist ein JOIN erforderlich zwischen AutorenTBL und BücherTBL auf dem gemeinsamen Feld, das von beiden Tabellen geteilt wird (AuthorID ):

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

Wie wir sehen können, CONCAT ermöglicht es uns, mehrere durch Kommas getrennte Zeichenfolgenausdrücke zu verbinden. Sie werden auch bemerkt haben, dass wir den Alias ​​Beschreibung gewählt haben um die Ergebnismenge der Verkettung darzustellen.

Die Ausgabe der obigen Abfrage wird im folgenden Bild gezeigt:

Mehrere Felder in MySQL-Tabelle abfragen
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)

Benutzer für den Zugriff auf die BookstoreDB-Datenbank erstellen

Mit root um alle DML auszuführen Operationen in einer Datenbank ist eine schlechte Idee. Um dies zu vermeiden, können wir eine neue MariaDB erstellen Benutzerkonto (wir nennen es bookstoreuser ) und weisen Sie alle erforderlichen Berechtigungen für BookstoreDB zu :

MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'YourPasswordHere';
MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON  BookstoreDB.* to [email protected];
MariaDB [BookstoreDB]> FLUSH PRIVILEGES;
Erstellen Sie einen neuen Datenbankbenutzer mit Berechtigungen
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)

Durch einen dedizierten, separaten Benutzer für jede Datenbank werden Schäden an der gesamten Datenbank verhindert, falls ein einzelnes Konto kompromittiert wird.

Zusätzliche MySQL-Tipps

Um die MariaDB aufzuräumen geben Sie den folgenden Befehl ein und drücken Sie Enter :

MariaDB [BookstoreDB]> \! clear

Um die Konfiguration einer bestimmten Tabelle zu überprüfen, tun Sie:

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

Zum Beispiel

MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;
Spalten in Datenbanktabelle auflisten
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)

Eine schnelle Überprüfung zeigt, dass BookIsAvailable Feld lässt NULL zu Werte. Da wir das nicht zulassen wollen, werden wir ÄNDERN die Tabelle wie folgt:

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

(Fühlen Sie sich frei, die Spalten erneut anzuzeigen – das hervorgehobene JA im obigen Bild sollte nun ein NEIN stehen ).

Um schließlich alle Datenbanken auf Ihrem Server anzuzeigen, tun Sie Folgendes:

MariaDB [BookstoreDB]> SHOW DATABASES;
OR
MariaDB [BookstoreDB]> SHOW SCHEMAS;
Alle MySQL-Datenbanken auflisten
[[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)

Das folgende Bild zeigt das Ergebnis des obigen Befehls nach dem Zugriff auf die MariaDB-Eingabeaufforderung als bookstoreuser (Beachten Sie, dass dieses Konto keine anderen Datenbanken als BookstoreDB „sehen“ kann und information_schema (verfügbar für alle Benutzer):

Zusammenfassung

In diesem Artikel haben wir erklärt, wie man DML ausführt Operationen und wie man eine Datenbank, Tabellen und dedizierte Benutzer in einer MariaDB-Datenbank erstellt. Darüber hinaus haben wir einige Tipps geteilt, die Ihnen das Leben als System-/Datenbankadministrator erleichtern können.

  1. MySQL-Datenbankverwaltung, Teil – 1
  2. MySQL-Datenbankverwaltung, Teil – 2
  3. MySQL-Leistungsoptimierung und -optimierung – Teil 3

Wenn Sie Fragen zu diesem Artikel haben, zögern Sie nicht, uns diese mitzuteilen! Fühlen Sie sich frei, das Kommentarformular unten zu verwenden, um uns zu erreichen.