Wprowadzenie do bazy danych dołącza do Mariadb i MySQL

Wprowadzenie do bazy danych dołącza do Mariadb i MySQL

Cel

Naucz się znać różnego rodzaju połączeń i jak korzystać z nich z bazami danych MySQL lub Mariadb

Wymagania

  • Brak szczególnych wymagań

Konwencje

  • # - Wymaga podanego polecenia Linuxa, które można było wykonać z uprawnieniami root
    bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
  • $ - Biorąc pod uwagę polecenie Linux, które ma być wykonane jako zwykły użytkownik niepewny

Wstęp

W relacyjnym systemie bazy danych dane są zorganizowane w tabelach, złożone przez wiersze i kolumny. Każdy wiersz jest instancją jednostki reprezentowanej przez tabelę, z kolumnami używanymi jako jego właściwości. Relacje między tabelami są ustalane przy użyciu klawiszy obcego i stwierdzenia, z którymi możemy wykonywać zapytania, które obejmują wiele tabel, nazywa się dołączyć. W tym samouczku zobaczymy różny typ połączeń dostępny podczas korzystania z MySQL lub MariaDB.

Baza danych „Movie_store”

To, co zamierzamy zrobić w tym samouczku, to odtworzenie niektórych konkretnych przypadków, w których dołączenia mogą pomóc nam osiągnąć to, czego chcemy.

Pierwszą rzeczą jest utworzenie testowej bazy danych. Powiedzmy, że posiadamy sklep z filmami i musimy śledzić dostępne tytuły: stworzymy bazę danych „Movie_store” i tabelę do hostowania informacji o reżyserach filmowych:

Mariadb [(brak)]> Utwórz bazę danych_store; Mariadb [(brak)]> Użyj filmu_store; Mariadb [film_store]> Utwórz reżyserkę tabeli ( -> id SmallIt (1) Unsigned Not Null Auto_increment, -> Nazwa varchar (35) nie null, -> data urodzin nie null, -> klucz podstawowy (id)); 
Kopiuj

Oto wizualna reprezentacja tabeli, którą właśnie stworzyliśmy:

Mariadb [Movies]> Opisz reżysera; +-----------+----------------------+------+------+- --------+ ----------------+ | Pole | Typ | NULL | Klucz | Domyślnie | Dodatkowe | +-----------+----------------------+------+------+- --------+ ----------------+ | Id | Smallint (1) Unsigned | Nie |. Pri | NULL | Auto_increment | |. Nazwa | VARCHAR (35) | Nie |. |. NULL | |. |. Data urodzenia | Data | Nie |. |. NULL | | +-----------+----------------------+------+-----+---------+----------------+ 
Kopiuj

Najpierw stworzyliśmy bazę danych_store, niż „wprowadziliśmy” za pomocą UŻYWAĆ Oświadczenie i ostatecznie utworzył tabelę dyrektora. Jak powiedzieliśmy wcześniej, każdy rząd w tabeli reprezentuje „instancję” jednostki reprezentowanej przez sam stół, w tym przypadku reżyser filmowy.

Każdy dyrektor ma pewne nieruchomości reprezentowane przez kolumny tabeli, więc na przykład każdy reżyser ma nazwisko i urodziny. Każdy wiersz ma unikalny identyfikator, który jest wartością w kolumnie, która jest główny klucz stołu.

W tym przykładzie kluczem podstawowym jest również to, co nazywa się Klucz zastępczy. Ten typ klucza jest „sztucznym” identyfikatorem, w tym sensie, że nie jest związany z naturą jednostki (w tym przypadku katalog): nie ma znaczenia semantycznego i jest generowany i wykorzystywany przez system dla jego Własna praca wewnętrzna. Klucz jest generowany automatycznie, a ponieważ ma on Auto_increment właściwość, jest ona stopniowo wstawiana za każdym razem, gdy tworzymy nowy wiersz, więc nie musimy go wyraźnie wstawić:

Mariadb [film_store]> Wstaw do reżysera („Nazwa”, „dat”) wartości-> („George Lucas”, „1944-05-14”),-> („George Romero”, „1940-02-04” ),-> („John McTiernan”, „1951-01-08”),-> („Rian Johnson”, „1973-12-17”); 
Kopiuj

Nasz stół zawiera teraz czterech dyrektorów:

+----+----------------+------------+ |. Id | Nazwa | Data urodzenia | +----+----------------+------------+| 1 | George Lucas | 1944-05-14 | |. 2 | George Romero | 1940-02-04 | |. 3 | John McTiernan | 1951-01-08 | |. 4 | Rian Johnson | 1973-12-17 | +----+----------------+------------+ 
Kopiuj

Każdy z tych reżyserów ma z nim jeden lub więcej filmów: jak moglibyśmy je reprezentować ? Nie możemy dodać informacji o filmach w tej tabeli: oznaczałoby to posiadanie wielu powtarzających się danych: za każdym razem, gdy dodajemy film, powtórzymy jego informacje o reżyserii, a co najmniej byłoby okropne. Musimy utworzyć dedykowaną tabelę do hostowania informacji o filmach, a jednocześnie musimy być w stanie stworzyć odniesienie między nim a jego reżyserem. To jest co klucz obcy są dla:



Mariadb [film_store]> Utwórz tytuł tabeli ( -> id SmallIt (1) Unsigned Not Null Auto_increment, -> Nazwa varchar (35) Not Null, -> Data release_date nie null, -> gatunek varchar (10) nie null, -> reżyser_id Smallint (1) Unsigned Not Null, -> Klucz podstawowy (id), -> Klucz zagraniczny (reżyser_d) referencje Dyrektor (id)); 
Kopiuj

Stworzyliśmy tabelę tak jak poprzednio, definiując klucz podstawowy i dodając ograniczenie klucza obcego. W ten sposób włączamy związek między dwiema tabelami: zasadniczo narzucamy, że aby wstawić wiersz, wartość kolumny Director_id musi odpowiadać wartości w kolumnie identyfikacyjnej tabeli dyrektora (która jest unikalna, ponieważ jest to jest to Klucz podstawowy tabeli). Innymi słowy, każdy tytuł musi mieć odniesienie do istniejącego dyrektora w naszej bazie danych, w przeciwnym razie zostanie uruchomiony błąd: zapewnia to spójność.

Włóżmy kilka tytułów w naszym stole:

Mariadb [film_store]> Wstaw do tytułu („Nazwa”, „wydanie_date”, „gatunek”, „reżyser_id”) wartości-> („Night of the Living Dead”, „1968-10-01”, „Horror”, 2, 2, 2 ),-> („Revenge of the Sith”, „2005-05-19”, „Space Opera”, 1),-> („Die Hard”, „1988-07-15”, „Action”, 3) ; 
Kopiuj

To wszystko, mamy tytuł. Najpierw wstawiliśmy to arcydzieło filmu, który jest „Night of the Living Dead”, w reżyserii George'a Romero: Zauważ, że 2 W kolumnie reżysera_id.

Korzystając z tej samej zasady, włożyliśmy film od George'a Lucasa (ID 1 w tabeli reżysera), „Revenge of the Sith” i „Die Hard”, słynny film akcji w reżyserii Johna McTiernana (ID 3 w tabeli reżysera). W tej chwili nie mamy filmów od Riana Johnsona: istnieje powód (oprócz tego, że byłem rozczarowany ostatnim Jedi) i zobaczymy to później. Teraz, gdy konfigurujemy bardzo podstawową strukturę bazy danych, możemy zacząć mówić dołącza.

Ile rodzajów dołączenia?

Różne nazwy służą do odwołania się do tego samego rodzaju połączeń, ale w zasadzie mamy wewnętrzny I zewnętrzny dołącza. Ten pierwszy jest również nazywany skrzyżowane dołączenia lub po prostu dołącza (Są synonimami w MySQL - Mariadb). Ta ostatnia kategoria obejmuje lewy I Prawidłowy dołącza.



Wewnętrzne dołącza

Wewnętrzne dołączenie pozwól nam dopasować rzędy w jednym stole z rzędami w innym. Związek ten może opierać się na związku między dwoma tabelami lub może być wykonane niezależnie od tego: w tym przypadku wszystkie rzędy tabeli zostaną połączone ze wszystkimi rzędami drugiego, tworząc tak się nazywa Produkt kartezjański. Nie ma to większego sensu w naszym przykładzie, ale pozwólmy mu pokazać:

Mariadb [film_store]> Wybierz * z reżysera dołącz do tytułu; +----+----------------+------------+----+--------- -----------------+--------------+------------+---- ---------+ | Id | Nazwa | Data urodzenia | Id | Nazwa | Release_date | gatunek | reżyser_id | +----+----------------+------------+----+--------- -----------------+--------------+------------+---- ---------+ | 1 | George Lucas | 1944-05-14 | 1 | Noc żywych martwych | 1968-10-01 | Horror | 2 | |. 1 | George Lucas | 1944-05-14 | 2 | Zemsta Sithów | 2005-05-19 | Space Oper | 1 | |. 1 | George Lucas | 1944-05-14 | 3 | Die ciężko | 1988-07-15 | Działanie | 3 | |. 2 | George Romero | 1940-02-04 | 1 | Noc żywych martwych | 1968-10-01 | Horror | 2 | |. 2 | George Romero | 1940-02-04 | 2 | Zemsta Sithów | 2005-05-19 | Space Oper | 1 | |. 2 | George Romero | 1940-02-04 | 3 | Die ciężko | 1988-07-15 | Działanie | 3 | |. 3 | John McTiernan | 1951-01-08 | 1 | Noc żywych martwych | 1968-10-01 | Horror | 2 | |. 3 | John McTiernan | 1951-01-08 | 2 | Zemsta Sithów | 2005-05-19 | Space Oper | 1 | |. 3 | John McTiernan | 1951-01-08 | 3 | Die ciężko | 1988-07-15 | Działanie | 3 | |. 4 | Rian Johnson | 1973-12-17 | 1 | Noc żywych martwych | 1968-10-01 | Horror | 2 | |. 4 | Rian Johnson | 1973-12-17 | 2 | Zemsta Sithów | 2005-05-19 | Space Oper | 1 | |. 4 | Rian Johnson | 1973-12-17 | 3 | Die ciężko | 1988-07-15 | Działanie | 3 | +----+----------------+------------+----+--------------------------+--------------+------------+-------------+ 
Kopiuj

Jak widać, każdy wiersz jednego stołu został połączony z każdym wierszem drugiego, wytwarzając 12 wierszy.

Zobaczmy teraz inny przypadek użycia dołączenia. Powiedzmy, że chcemy sprawdzić naszą bazę danych, aby sprawdzić wszystkie filmy w reżyserii George'a Lucasa, które mamy w sklepie. Aby wykonać to zadanie, musimy ograniczyć połączenie za pomocą NA klauzula, aby była oparta na relacjach między tytułami a ich dyrektorem:

Mariadb [film_store]> Wybierz reżyser.Nazwa tytułu.Nazwa jako film_title od reżysera -> dołącz do tytułu reżysera.id = tytuł.reżyser_id -> gdzie dyrektor.Name = "George Lucas" 
Kopiuj

Oto wynik powyższego zapytania:

+--------------+---------------------+ |. Nazwa | film_title | +--------------+---------------------+| George Lucas | Zemsta Sithów | +--------------+---------------------+ 
Kopiuj

Korzystając z ograniczonego połączenia, w oparciu o związek między dwoma tabelami, odkryliśmy, że mamy tylko jeden tytuł George'a Lucasa: Revenge of the Sith. Nie tylko ograniczyliśmy dołączenie do bazy relacji istniejącej między dwoma tabelami, ale dodatkowo ograniczyliśmy zapytanie do filmów wyreżyserowanych przez Lucasa, korzystając z GDZIE oświadczenie. Gdybyśmy to pominęli, zapytanie stworzyło stół ze wszystkimi istniejącymi reżyserami - korespondencją filmową:

+----------------+--------------------------+ |. Nazwa | film_title | +----------------+--------------------------+| George Lucas | Zemsta Sithów | |. George Romero | Noc żywych martwych | |. John McTiernan | Die ciężko | +----------------+--------------------------+ 
Kopiuj

Zauważ, że Rian Johnson nie jest uwzględniony w zapytaniu. Dlaczego tak się dzieje? Jest to cecha wewnętrznych połączeń: pokazują tylko rzędy, w których mecz istnieje w obu tabelach. Ponieważ w tabeli tytułowej nie ma korespondencji dla Riana Johnsona, nie mamy żadnych wyników dla tego dyrektora.



Zewnętrzne dołącza

Innym rodzajem połączeń, które mamy Zewnętrzne dołącza. Ta kategoria sama jest podzielona lewe dołącza I Prawe dołącza. Jaka jest różnica w przypadku wewnętrznych połączeń, które widzieliśmy powyżej ? W przeciwieństwie do tego, co dzieje się z wewnętrznym połączeniem, zewnętrzne programy połączeń, nawet gdy korespondencja nie istnieje w obu tabelach. Gdy tak jest, pokaże wartość zerową w żądanej kolumnie tabeli, w której mecz nie istnieje.Może to być przydatne, na przykład, jeśli chcemy wiedzieć, czy są niektórzy reżyserzy bez filmów. W naszym przypadku już wiemy, że tak jest, ale zweryfikujemy to za pomocą przyłączania lewej:

Mariadb [film_store]> Wybierz reżyser.Nazwa tytułu.Nazwa jako film_title -> od reżysera po lewej stronie Tytuł na tytuł.reżyser_id = reżyser.ID 
Kopiuj

Wynik zapytania:

+----------------+--------------------------+ |. Nazwa | film_title | +----------------+--------------------------+| George Romero | Noc żywych martwych | |. George Lucas | Zemsta Sithów | |. John McTiernan | Die ciężko | |. Rian Johnson | NULL | +----------------+--------------------------+ 
Kopiuj

Jedynym reżyserem, który w naszym sklepie nie ma filmów, jest Rian Johnson. Podczas korzystania z zewnętrznej kolejności, w jakiej określamy, tabele jest ważne. Na przykład za pomocą Lewy dołącz, Jak właśnie zrobiliśmy powyżej, kiedy rząd z lewej tabeli (w tym przypadku dyrektor) nie ma dopasowania w rzędach prawej tabeli (tytuł), a ZERO Wartość jest określona w każdej żądanej kolumnie tego ostatniego; Po znalezieniu meczu, jego wartość jest wyświetlana, tak jak dzieje się z wewnętrznym połączeniem.

A Prawe dołącz Działa tak samo, jedyną różnicą jest to, że rola tabel jest odwrócona. W prawym połączeniu z całego wiersza prawej tabeli, która nie ma dopasowania w lewej tabeli, są oznaczone wartością zerową.

Ta właściwość zewnętrznego łączy się, jest bardzo przydatna, ale są przypadki, w których można powstać niewielkie zamieszanie, szczególnie gdy tabela ma wartość zerową w niektórych kolumnach.

Powiązane samouczki Linux:

  • Zainstaluj MySQL na Ubuntu 20.04 LTS Linux
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Jak zainstalować MySQL na Almalinux
  • Jak zmienić hasło użytkownika mariadb
  • Wprowadzenie do silników magazynowych MySQL
  • Aplikacje graficzne interfejs użytkownika (GUI) do zarządzania…
  • Ubuntu 20.04 WordPress z instalacją Apache
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Instalacja OpenLitespeed WordPress
  • Instalacja Ampache Raspberry Pi