W tym artykule pokażemy, jak utworzyć bazę danych (znaną również jako schemat), tabele (z typami danych) i wyjaśnimy, jak wykonać język manipulacji danymi (DML ) operacje na danych w MySQL / MariaDB serwer.
Zakłada się, że wcześniej 1) zainstalowałeś niezbędne pakiety w systemie Linux i 2) wykonane mysql_secure_installation w celu poprawy bezpieczeństwa serwera bazy danych. Jeśli nie, postępuj zgodnie z poniższymi instrukcjami, aby zainstalować serwer MySQL/MariaDB.
- Zainstaluj najnowszą bazę danych MySQL w systemach Linux
- Zainstaluj najnowszą bazę danych MariaDB w systemach Linux
Dla zwięzłości będziemy odnosić się do MariaDB wyłącznie w tym artykule, ale opisane tu koncepcje i polecenia dotyczą MySQL również.
Część 1 :Naucz się MySQL / MariaDB dla początkujących Część 2 :Dowiedz się, jak korzystać z kilku funkcji MySQL i MariaDBTworzenie baz danych, tabel i autoryzowanych użytkowników
Jak wiadomo, bazę danych można w prosty sposób zdefiniować jako zorganizowany zbiór informacji. W szczególności MariaDB to system zarządzania relacyjnymi bazami danych (RDBMS ) i używa Structure Query Language do wykonywania operacji na bazach danych. Ponadto należy pamiętać, że MariaDB używa zamiennie terminów baza danych i schemat.
Aby przechowywać trwałe informacje w bazie danych, użyjemy tabeli przechowujące wiersze danych. Często dwie lub więcej tabel będzie w jakiś sposób ze sobą powiązanych. To część organizacji, która charakteryzuje korzystanie z relacyjnych baz danych.
Tworzenie nowej bazy danych
Aby utworzyć nową bazę danych o nazwie BooksDB
, wprowadź monit MariaDB za pomocą następującego polecenia (zostaniesz poproszony o podanie hasła dla użytkownika root MariaDB):
[[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)]>
Po utworzeniu bazy danych musimy utworzyć na niej co najmniej dwie tabele. Ale najpierw przyjrzyjmy się koncepcji typów danych.
Przedstawiamy typy danych MariaDB
Jak wyjaśniliśmy wcześniej, tabele to obiekty bazy danych, w których będziemy przechowywać trwałe informacje. Każda tabela składa się z co najmniej dwóch pól (znanych również jako kolumny ) danego typu danych (rodzaju informacji), które takie pole może przechowywać.
Najpopularniejsze typy danych w MariaDB to (możesz zapoznać się z pełną listą w oficjalnej dokumentacji online MariaDB):
Liczba:
- BOOLEAN uważa 0 za fałszywe, a wszelkie inne wartości za prawdziwe.
- TINYINT , jeśli jest używany z SIGNED, obejmuje zakres od -128 do 127, podczas gdy zakres UNSIGNED wynosi od 0 do 255.
- MAŁY , jeśli jest używany z SIGNED, obejmuje zakres od -32768 do 32767. Zakres UNSIGNED wynosi od 0 do 65535.
- INT , jeśli jest używany z UNSIGNED, obejmuje zakres od 0 do 4294967295, a w przeciwnym razie od -2147483648 do 2147483647.
Uwaga :W TINYINT, SMALLINT i INT przyjmuje się domyślną wartość SIGNED.
PODWÓJNE (M, D) , gdzie M to całkowita liczba cyfr i D to liczba cyfr po przecinku, reprezentuje liczbę zmiennoprzecinkową o podwójnej precyzji. Jeśli określono opcję UNSIGNED, wartości ujemne nie są dozwolone.
Ciąg:
- VARCHAR(M) reprezentuje ciąg o zmiennej długości, gdzie M to maksymalna dozwolona długość kolumny w bajtach (teoretycznie 65 535). W większości przypadków liczba bajtów jest identyczna z liczbą znaków, z wyjątkiem niektórych znaków, które mogą zająć nawet 3 bajty. Na przykład hiszpańska litera ñ reprezentuje jeden znak, ale zajmuje 2 bajty.
- TEKST(M) reprezentuje kolumnę o maksymalnej długości 65 535 znaków. Jednak, jak to bywa w przypadku VARCHAR(M) , rzeczywista maksymalna długość jest zmniejszona, jeśli przechowywane są znaki wielobajtowe. Jeśli M jest określony, kolumna jest tworzona jako najmniejszy typ, który może przechowywać taką liczbę znaków.
- ŚREDNI TEKST(M) i DŁUGI TEKST(M) są podobne do TEKST(M) , tylko że maksymalna dozwolona długość to odpowiednio 16 777 215 i 4 294 967 295 znaków.
Data i godzina:
- DATA przedstawia datę w formacie RRRR-MM-DD format.
- CZAS reprezentuje czas w GG:MM:SS.sss format (godzina, minuty, sekundy i milisekundy).
- DATETIME jest kombinacją DATE i CZAS w RRRR-MM-DD GG:MM:SS format.
- ZNACZNIK CZASOWY służy do określenia momentu, w którym wiersz został dodany lub zaktualizowany.
Po przejrzeniu tych typów danych będziesz w lepszej pozycji, aby określić, jaki typ danych musisz przypisać do danej kolumny w tabeli.
Na przykład imię osoby może łatwo zmieścić się w VARCHAR(50) , podczas gdy post na blogu będzie wymagał TEKSTU typ (wybierz M zgodnie z Twoimi konkretnymi potrzebami).
Tworzenie tabel z kluczem podstawowym i obcym
Zanim zagłębimy się w tworzenie tabel, musimy przejrzeć dwie podstawowe koncepcje dotyczące relacyjnych baz danych:podstawowa i zagraniczne klawisze.
klucz podstawowy zawiera wartość, która jednoznacznie identyfikuje każdy wiersz lub rekord w tabeli. Z drugiej strony klucz obcy służy do tworzenia połączenia między danymi w dwóch tabelach oraz do kontrolowania danych, które mogą być przechowywane w tabeli, w której znajduje się klucz obcy. Zarówno klucze podstawowe, jak i obce są zazwyczaj INT.
Aby to zilustrować, użyjmy BookstoreDB
i utwórz dwie tabele o nazwie AuthorsTBL
i BooksTBL
następująco. NIE NULL ograniczenie wskazuje, że powiązane pole wymaga wartości innej niż NULL .
Ponadto AUTO_INCREMENT służy do zwiększenia o jeden wartości INT kolumny klucza głównego po wstawieniu nowego rekordu do tabeli.
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) );Twórz tabele MySQL z kluczem podstawowym i obcym
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]>
Teraz możemy śmiało zacząć wstawiać rekordy do AuthorsTBL
i BooksTBL
.
Wybieranie, wstawianie, aktualizowanie i usuwanie wierszy
Najpierw wypełnimy AuthorsTBL
stół. Czemu? Ponieważ potrzebujemy wartości dla AuthorID
przed wstawieniem rekordów do BooksTBL .
Wykonaj następujące zapytanie z monitu MariaDB:
MariaDB [BookstoreDB]> INSERT INTO AuthorsTBL (AuthorName) VALUES ('Agatha Christie'), ('Stephen King'), ('Paulo Coelho');
Następnie wybierzemy wszystkie rekordy z AuthorsTBL . Pamiętaj, że będziemy potrzebować Identyfikatora Autora dla każdego rekordu, aby utworzyć INSERT zapytanie dotyczące BooksTBL .
Jeśli chcesz pobierać jeden rekord na raz, możesz użyć GDZIE klauzula, aby wskazać warunek, który musi spełnić wiersz, aby został zwrócony. Na przykład
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';
Alternatywnie możesz wybrać wszystkie rekordy jednocześnie:
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;Wybierz i wyszukaj rekord w 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]>
Teraz utwórzmy INSERT zapytanie dla BooksTBL , używając odpowiedniego Identyfikatora Autora pasujące do autora każdej książki. Wartość 1 w Książka jest dostępna wskazuje, że książka jest w magazynie, 0 w przeciwnym razie:
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);Wstaw zapytanie do tabeli MySQL
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
W tym momencie wykonamy WYBIERZ aby zobaczyć rekordy w BooksTBL . Następnie przejdźmy do AKTUALIZACJI cena „Alchemika ” autorstwa Paulo Coelho i WYBIERZ ten konkretny rekord ponownie.
Zwróć uwagę, jak BookLastUpdated pole pokazuje teraz inną wartość. Jak wyjaśniliśmy wcześniej, TIMESTAMP pole pokazuje wartość, kiedy rekord został wstawiony lub ostatnio zmodyfikowany.
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;Wstaw zapytanie i zaktualizuj tabelę w bazie danych MySQL
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]>
Chociaż nie zrobimy tego tutaj, możesz również usunąć rekord, jeśli nie jest już używany. Załóżmy na przykład, że chcemy usunąć „Alchemik ” z BooksTBL .
Aby to zrobić, użyjemy USUŃ oświadczenie w następujący sposób:
MariaDB [BookstoreDB]> DELETE FROM BooksTBL WHERE BookID=6;
Tak jak w przypadku AKTUALIZACJI , dobrym pomysłem jest wykonanie WYBIERZ najpierw w celu wyświetlenia rekordów, na które potencjalnie może wpłynąć DELETE .
Nie zapomnij też dodać GDZIE klauzula i warunek (BookID=6) aby wybrać konkretny rekord do usunięcia. W przeciwnym razie ryzykujesz usunięcie wszystkich wierszy w tabeli!
Jeśli chcesz połączyć dwa (lub więcej) pól, możesz użyć KONCAT oświadczenie. Załóżmy na przykład, że chcemy zwrócić zestaw wyników składający się z jednego pola z nazwą książki i autorem w formie „Alchemik (Paulo Coelho) ” i kolejna kolumna z ceną.
Będzie to wymagało DOŁĄCZENIA między AutorzyTBL i KsiążkiTBL we wspólnym polu współdzielonym przez obie tabele (AuthorID ):
MariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID;
Jak widzimy, CONCAT pozwala nam łączyć wiele wyrażeń łańcuchowych oddzielonych przecinkami. Zauważysz również, że wybraliśmy alias Opis do reprezentowania zestawu wyników konkatenacji.
Wynik powyższego zapytania pokazano na poniższym obrazku:
Zapytanie o wiele pól w tabeli MySQLMariaDB [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)
Utwórz użytkownika, aby uzyskać dostęp do bazy danych BookstoreDB
Korzystanie z rootu wykonać wszystkie DML operacje w bazie danych to zły pomysł. Aby tego uniknąć, możemy utworzyć nową MariaDB konto użytkownika (nazwiemy je użytkownik księgarni ) i przypisz wszystkie niezbędne uprawnienia do BookstoreDB :
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'YourPasswordHere'; MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; MariaDB [BookstoreDB]> FLUSH PRIVILEGES;Utwórz nowego użytkownika bazy danych z uprawnieniami
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)
Posiadanie dedykowanego, oddzielnego użytkownika dla każdej bazy danych zapobiegnie uszkodzeniom całej bazy danych w przypadku naruszenia bezpieczeństwa pojedynczego konta.
Dodatkowe wskazówki dotyczące MySQL
Aby wyczyścić MariaDB wpisz następujące polecenie i naciśnij Enter :
MariaDB [BookstoreDB]> \! clear
Aby sprawdzić konfigurację danej tabeli, wykonaj:
MariaDB [BookstoreDB]> SELECT COLUMNS IN [TABLE NAME HERE ];
Na przykład
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;Lista kolumn w tabeli bazy danych
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)
Szybka inspekcja pokazuje, że BookIsAvailable pole przyznaje NULL wartości. Ponieważ nie chcemy na to pozwolić, ZMIENIAMY tabela w następujący sposób:
MariaDB [BookstoreDB]> ALTER TABLE BooksTBL MODIFY BookIsAvailable BOOLEAN NOT NULL;
(Zapraszam do ponownego wyświetlenia kolumn – podświetlone TAK na powyższym obrazku powinno być teraz NIE ).
Na koniec, aby wyświetlić wszystkie bazy danych na swoim serwerze, wykonaj:
MariaDB [BookstoreDB]> SHOW DATABASES; OR MariaDB [BookstoreDB]> SHOW SCHEMAS;Lista wszystkich baz danych MySQL
[[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)
Poniższy obraz przedstawia wynik powyższego polecenia po uzyskaniu dostępu do monitu MariaDB jako użytkownik księgarni (zwróć uwagę, że to konto nie „widzi” żadnych baz danych innych niż BookstoreDB i schemat_informacji (dostępne dla wszystkich użytkowników):
Podsumowanie
W tym artykule wyjaśniliśmy, jak uruchomić DML operacje i sposób tworzenia bazy danych, tabel i dedykowanych użytkowników w bazie danych MariaDB. Dodatkowo podzieliliśmy się kilkoma wskazówkami, które mogą ułatwić Ci życie jako administratora systemu / bazy danych.
- Część administrowania bazą danych MySQL – 1
- Część administracyjna bazy danych MySQL – 2
- Dostrajanie i optymalizacja wydajności MySQL – część 3
Jeśli masz jakiekolwiek pytania dotyczące tego artykułu, daj nam znać! Zachęcamy do skorzystania z poniższego formularza komentarzy, aby się z nami skontaktować.