Im Unterricht "studieren" wir alle Datenbanken und jeder nutzt Access. Gelangweilt versuche ich, das zu tun, was der Rest der Klasse tut, aber mit rohen SQL-Befehlen mit MySQL, anstatt Access zu verwenden.
Ich habe es geschafft, Datenbanken und Tabellen zu erstellen, aber wie kann ich nun eine Beziehung zwischen zwei Tabellen herstellen?
Wenn ich meine zwei Tabellen so habe:
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 )
)
und
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 )
)
Wie erstelle ich eine Beziehung zwischen den beiden Tabellen? Ich möchte, dass jedem Konto eine Kunden-ID zugewiesen wird (um anzugeben, wem es gehört).
mysql
sql
foreign-keys
relational-database
Josh Hunt
quelle
quelle
Antworten:
Wenn die Tabellen innodb sind, können Sie sie wie folgt erstellen:
Sie müssen angeben, dass die Tabellen innodb sind, da die myisam-Engine keinen Fremdschlüssel unterstützt. Weitere Informationen finden Sie hier .
quelle
Wie Ehogue sagte, tragen Sie dies in Ihre CREATE TABLE ein
Wenn Sie die Tabelle bereits erstellt haben, verwenden Sie alternativ den Befehl ALTER TABLE:
Eine gute Möglichkeit, diese Befehle zu erlernen, ist die Verwendung der MySQL-GUI-Tools , die Ihnen eine "visuellere" Oberfläche für die Arbeit mit Ihrer Datenbank bieten. Der eigentliche Vorteil (gegenüber der Access-Methode) besteht darin, dass nach dem Entwerfen Ihrer Tabelle über die GUI die SQL angezeigt wird, die ausgeführt werden soll, und Sie daraus lernen können.
quelle
Sie müssen sich fragen, ob dies eine 1: 1-Beziehung oder eine 1 von vielen Beziehungen ist. Das heißt, hat jedes Konto einen Kunden und jeder Kunde hat ein Konto. Oder wird es Kunden ohne Konten geben? Ihre Frage impliziert letzteres.
Wenn Sie eine strikte 1: 1-Beziehung haben möchten, führen Sie einfach die beiden Tabellen zusammen.
Im anderen Fall besteht die richtige Methode zum Erstellen einer Beziehung zwischen zwei Tabellen darin, eine Beziehungstabelle zu erstellen.
Wenn Sie dann eine customer_id haben und die Kontoinformationen möchten, schließen Sie sich Kundenkonten und Konten an:
Aufgrund der Indizierung ist dies unglaublich schnell.
Sie können auch eine ANSICHT erstellen, die den Effekt der kombinierten Kundenkonten-Tabelle zeigt, während diese getrennt bleiben
quelle
ca.
nichtac.
(3 Plätze).PRIMARY KEY (customer_id, account_id)
ohne Komma danach geschriebenWenn Sie den Kommentar von ehogue ergänzen, sollten Sie die Größe der Schlüssel in beiden Tabellen anpassen. Eher, als
mach es
und stellen Sie sicher, dass Ihre int-Spalte in der Kundentabelle auch int (10) ist.
quelle
Bestimmte MySQL-Engines unterstützen Fremdschlüssel. InnoDB kann beispielsweise Einschränkungen basierend auf Fremdschlüsseln festlegen. Wenn Sie versuchen, einen Eintrag in einer Tabelle zu löschen, der Abhängige in einer anderen Tabelle enthält, schlägt das Löschen fehl.
Wenn Sie in MySQL einen Tabellentyp wie MyISAM verwenden, der keine Fremdschlüssel unterstützt, verknüpfen Sie die Tabellen nur mit Ihren Diagrammen und Abfragen.
In einer Abfrage verknüpfen Sie beispielsweise zwei Tabellen in einer select-Anweisung mit einem Join:
quelle
Im Folgenden finden Sie einige Ressourcen, die Ihnen den Einstieg erleichtern: http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase und http://code.tutsplus.com/articles/sql-for-beginners-part- 3-Datenbank-Beziehungen - net-8561
Verwenden Sie auch, wie andere sagten, eine grafische Benutzeroberfläche. Versuchen Sie, Xampp (oder Wamp) herunterzuladen und zu installieren, auf dem Server-Software (Apache und mySQL) auf Ihrem Computer ausgeführt wird. Wenn Sie dann in einem Browser zu // localhost navigieren, wählen Sie PHPMyAdmin aus, um visuell mit einer mySQL-Datenbank zu arbeiten. Wie oben erwähnt, haben Sie innoDB verwendet, damit Sie die gewünschten Beziehungen herstellen können. Erleichtert das Anzeigen, was Sie mit den Datenbanktabellen tun. Denken Sie daran, Apache- und mySQL-Dienste zu beenden, wenn Sie fertig sind. Diese können Ports öffnen, die Sie Hacking / böswilligen Bedrohungen aussetzen können.
quelle
Eine der Regeln, die Sie kennen müssen, ist, dass die Tabellenspalte, auf die Sie verweisen möchten, denselben Datentyp wie die referenzierende Tabelle haben muss. 2 Wenn Sie sich für MySQL entscheiden, müssen Sie InnoDB Engine verwenden, da dies Ihrer Frage nach die Engine ist, die unterstützt, was Sie in MySQL erreichen möchten.
Unten ist der Code, versuchen Sie es, obwohl die ersten Leute, die diese Frage beantworteten, zu 100% großartige Antworten gaben und bitte alle berücksichtigen.
quelle
quelle