353 Stimmen

Fremdschlüssel in phpMyAdmin einrichten?

Ich bin dabei, eine Datenbank mit phpMyAdmin einzurichten. Ich habe zwei Tabellen ( foo y bar ), indiziert auf ihre Primärschlüssel . Ich versuche, eine relationale Tabelle zu erstellen ( foo_bar ) zwischen ihnen, wobei ihre Primärschlüssel als Fremdschlüssel verwendet werden.

Ich habe diese Tabellen als MyISAM-Tabellen erstellt, habe aber inzwischen alle drei auf InnoDB umgestellt, weil ich gelesen habe, dass MyISAM keine Fremdschlüssel unterstützt. Alle id Felder sind INT(11) .

Wenn ich die foo_bar Tabelle, klicken Sie auf den Link "Beziehungsansicht", und versuchen Sie, die FK-Spalten so einzustellen, dass sie database.foo.id y database.bar.id heißt es "Kein Index definiert!" neben jeder Spalte.

Was übersehe ich?

Klärung/Aktualisierung

Der Einfachheit halber möchte ich weiterhin phpMyAdmin verwenden. Ich benutze derzeit XAMPP, das einfach genug ist, damit ich mich auf PHP/CSS/Javascript konzentrieren kann, und es kommt mit phpMyAdmin.

Auch wenn ich noch keine expliziten Fremdschlüssel einrichten konnte, habe ich eine relationale Tabelle und kann solche Verknüpfungen durchführen:

SELECT * 
FROM foo 
INNER JOIN foo_bar 
ON foo.id = foo_bar.foo_id 
INNER JOIN bar
ON foo_bar.bar_id = bar.id;

Es ist mir einfach unangenehm, dass die FKs nicht explizit in der Datenbank definiert sind.

10voto

Fremdschlüssel bedeutet, dass ein nicht primäres Attribut einer Tabelle auf das primäre Attribut einer anderen Tabelle verweist. * in phpMyAdmin * Legen Sie zunächst die Spalte, die Sie als Fremdschlüssel verwenden wollen, als Index fest.

und klicken Sie dann auf RELATION VIEW

Dort finden Sie die Optionen zum Festlegen von Fremdschlüsseln

8voto

markus Punkte 39397

InnoDB ermöglicht es Ihnen, mit ALTER TABLE eine neue Fremdschlüssel-Beschränkung zu einer Tabelle hinzuzufügen:

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

Auf der anderen Seite, wenn MyISAM hat Vorteile gegenüber InnoDB in Ihrem Kontext, warum sollten Sie Fremdschlüssel Einschränkungen überhaupt erstellen möchten. Sie können dies auf der Modellebene Ihrer Anwendung behandeln. Stellen Sie nur sicher, dass die Spalten, die Sie als Fremdschlüssel verwenden wollen, indiziert sind!

5voto

pouya Punkte 2772

Vergessen Sie nicht, dass die beiden Spalten denselben Datentyp haben müssen.

Wenn z. B. eine Spalte vom Typ INT und die andere vom Typ tinyint ist, erhalten Sie folgenden Fehler:

Fehler beim Erstellen eines Fremdschlüssels für [PID-Spalte] (Datentypen prüfen)

5voto

Devsi Odedra Punkte 5028

Dies ist ein altes Thema, aber ich antworte, wenn es für jemanden nützlich ist.

Schritt 1 . Ihre Db Storage Engine ist auf InnoDB

Schritt 2 . Primäre Tabelle erstellen

aquí customer ist die Primärtabelle und customer_id ist Primärschlüssel

enter image description here

Schritt 3 . Fremdschlüsseltabelle erstellen und Index vergeben

hier haben wir customer_addresses als Bezugstabelle und speichert Kundenadressen, so dass hier customer_id Beziehung zu customer Tabelle

Wir können den Index direkt auswählen, wenn wir die Tabelle wie folgt erstellen

enter image description here

Wenn Sie beim Erstellen einer Tabelle vergessen haben, einen Index anzugeben können Sie einen Index aus dem Struktur Registerkarte der Tabelle wie unten.

enter image description here

Schritt 4 . Sobald der Index in das Feld eingegeben wurde, gehen Sie zur Registerkarte Struktur und klicken Sie auf Relation Ansicht wie im folgenden Bild gezeigt

enter image description here

Schritt 5 . Wählen Sie nun die ON DELETE und ON UPDATE, was Sie tun möchten, wählen Sie die Spalte aus der aktuellen Tabelle, wählen Sie die DB (SAME DB), wählen Sie die Relationstabelle und den Primärschlüssel aus dieser Tabelle, wie im folgenden Bild gezeigt. Speichern Sie il

enter image description here

Prüfen Sie nun, ob die Beziehung erfolgreich hergestellt wurde. Gehen Sie zur Liste der Fremdtabellendaten und klicken Sie auf den Wert des Fremdschlüssels, Sie werden zum Datensatz der Primärtabelle weitergeleitet, dann wurde die Beziehung erfolgreich hergestellt.

4voto

Ankit Jindal Punkte 2562

Vergewissern Sie sich, dass Sie Ihre mysql-Speicher-Engine ausgewählt haben als Innodb und nicht MYISAM da die Innodb-Speicher-Engine Fremdschlüssel in Mysql unterstützt.

Schritte zum Erstellen von Fremdschlüsseln in phpmyadmin:

  1. Tippen Sie auf Struktur für die Tabelle, die den Fremdschlüssel haben soll.
  2. erstellen. INDEX für die Spalte, die Sie als Fremdschlüssel verwenden wollen.
  3. Tippen Sie auf die Ansicht Relation, die sich unterhalb der Tabellenstruktur befindet

relation view

  1. Auf der Seite Beziehungsansicht sehen Sie vor dem Feld (das zu einem INDEX gemacht wurde) Auswahlmöglichkeiten.

setting foreign key relation

UPDATE CASCADE gibt an, dass die Spalte aktualisiert wird, wenn die referenzierte Spalte aktualisiert wird,

CASCADE LÖSCHEN angegebenen Zeilen werden gelöscht, wenn die referenzierten Zeilen gelöscht werden.

Alternativ können Sie auch eine Sql-Abfrage für dasselbe auslösen

ALTER TABLE table_name
ADD CONSTRAINT fk_foreign_key_name
FOREIGN KEY (foreign_key_name)
REFERENCES target_table(target_key_name);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X