Na zajęciach wszyscy „studiujemy” bazy danych i wszyscy korzystają z programu Access. Znudzony tym, próbuję robić to, co robi reszta klasy, ale za pomocą surowych poleceń SQL z MySQL zamiast używać Access.
Udało mi się stworzyć bazy danych i tabele, ale jak teraz utworzyć relację między dwiema tabelami?
Jeśli mam moje dwa stoły w ten sposób:
CREATE TABLE accounts(
account_id INT NOT NULL AUTO_INCREMENT,
customer_id INT( 4 ) NOT NULL ,
account_type ENUM( 'savings', 'credit' ) NOT NULL,
balance FLOAT( 9 ) NOT NULL,
PRIMARY KEY ( account_id )
)
i
CREATE TABLE customers(
customer_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
address VARCHAR(20) NOT NULL,
city VARCHAR(20) NOT NULL,
state VARCHAR(20) NOT NULL,
PRIMARY KEY ( customer_id )
)
Jak utworzyć „relację” między dwiema tabelami? Chcę, aby do każdego konta został „przypisany” jeden identyfikator klienta (aby wskazać, kto jest jego właścicielem).
mysql
sql
foreign-keys
relational-database
Josh Hunt
źródło
źródło
Odpowiedzi:
Jeśli tabele są innodb, możesz je utworzyć w ten sposób:
Musisz określić, że tabele są innodb, ponieważ silnik myisam nie obsługuje klucza obcego. Spójrz tutaj, aby uzyskać więcej informacji.
źródło
jak powiedział ehogue, umieść to w swojej TABELI TWORZENIA
alternatywnie, jeśli masz już utworzoną tabelę, użyj polecenia ALTER TABLE:
Dobrym sposobem na rozpoczęcie nauki tych poleceń jest użycie narzędzi MySQL GUI , które zapewniają bardziej „wizualny” interfejs do pracy z bazą danych. Prawdziwą korzyścią z tego (w porównaniu z metodą Access) jest to, że po zaprojektowaniu tabeli za pomocą interfejsu GUI, pokazuje on SQL, który będzie uruchamiany, a zatem możesz się z tego uczyć.
źródło
Musisz zadać sobie pytanie, czy jest to relacja 1 do 1, czy 1 z wielu. To znaczy, czy każde konto ma klienta i czy każdy klient ma konto. A może będą klienci bez kont. Twoje pytanie sugeruje to drugie.
Jeśli chcesz mieć ścisłą relację 1 do 1, po prostu połącz dwie tabele.
W drugim przypadku poprawnym sposobem utworzenia relacji między dwiema tabelami jest utworzenie tabeli relacji.
Następnie, jeśli masz identyfikator_klienta i chcesz uzyskać informacje o koncie, dołączasz do kont i kont klientów:
Dzięki indeksowaniu będzie to niezwykle szybkie.
Możesz również stworzyć WIDOK, który daje efekt połączonej tabeli kont klientów, zachowując ich oddzielne
źródło
ca.
nie miałeś na myśliac.
(3 miejsca).PRIMARY KEY (customer_id, account_id)
bez przecinka po nimDodając do komentarza ehogue'a, powinieneś dopasować rozmiar klawiszy w obu tabelach. Zamiast
Zrób to
i upewnij się, że kolumna int w tabeli klientów to również int (10).
źródło
Niektóre silniki MySQL obsługują klucze obce. Na przykład InnoDB może ustanawiać ograniczenia na podstawie kluczy obcych. Jeśli spróbujesz usunąć wpis w jednej tabeli, który ma elementy zależne w innej, usuwanie nie powiedzie się.
Jeśli używasz typu tabeli w MySQL, takiego jak MyISAM, który nie obsługuje kluczy obcych, nie łączysz tabel nigdzie poza diagramami i zapytaniami.
Na przykład w zapytaniu łączysz dwie tabele w instrukcji select za pomocą sprzężenia:
źródło
Oto kilka zasobów, które pomogą rozpocząć: http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase i http://code.tutsplus.com/articles/sql-for-beginners-part- 3-relacje-baz danych - net-8561
Jak mówili inni, użyj GUI - spróbuj pobrać i zainstalować Xampp (lub Wamp), który uruchamia oprogramowanie serwerowe (Apache i mySQL) na twoim komputerze. Następnie, gdy przejdziesz do // localhost w przeglądarce, wybierz PHPMyAdmin, aby wizualnie rozpocząć pracę z bazą danych mySQL. Jak wspomniano powyżej, wykorzystano innoDB, aby umożliwić tworzenie relacji zgodnie z życzeniem. Sprawia, że łatwiej jest zobaczyć, co robisz z tabelami bazy danych. Pamiętaj tylko, aby po zakończeniu ZATRZYMAĆ usługi Apache i mySQL - mogą one otwierać porty, które mogą narazić Cię na włamania / złośliwe zagrożenia.
źródło
Jedną z zasad, które musisz znać, jest to, że kolumna tabeli, do której chcesz się odwołać, musi mieć ten sam typ danych, co tabela odniesienia. 2 jeśli zdecydujesz się użyć mysql, musisz użyć InnoDB Engine, ponieważ zgodnie z Twoim pytaniem jest to silnik, który obsługuje to, co chcesz osiągnąć w mysql.
Poniżej znajduje się kod wypróbuj go, chociaż jako pierwsi odpowiedzieli na to pytanie w 100% udzielili świetnych odpowiedzi i prosimy o rozważenie ich wszystkich.
źródło
źródło