Wprowadzenie do bazy danych dołącza do Mariadb i MySQL
- 4879
- 363
- Tacjana Karpiński
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
- « Zaawansowane koncepcje Pythona
- Jak wykonywać żądania HTTP z Python - Część 1 Standardowa biblioteka »