Fremdschlüssel

BerlinerBaer

Mitglied
Hhallo Community,

nach vielen Jahren setze ich mich nun wieder mit PHP und MySQL auseinander. Soweit klappt alles noch wie gewohnt. Außer die Funktion der Fremdschlüssel.

Das System von Fremdschlüsseln habe ich verstanden. Was ich jedoch nicht verstehe ist folgende Fehlermeldung:
Fehler beim Erzeugen eines Fremdschlüssels für NutzerID (überprüfen Sie die Datentypen)

Diese taucht auf, wenn ich in phpMyAdmin in der Beziehungsansicht Constraints erstellen will. In der Designansicht kommt folgende Fehlermeldung:
Fehler: FOREIGN KEY konnte nicht hinzugefügt werden!
#1005 - Kann Tabelle `dieabrechnung`.`tnutzer` nicht erzeugen (Fehler: 150 "Foreign key constraint is incorrectly formed") (Details…)

Diese Fehlermeldung kommt, wenn ich in meiner Datenbank mehrere Tabellen von einer abhängig machen möchte. Meine Tabellenstruktur sieht wie folgt aus:

Code:
+----------+  +--------+  +---------+  +--------+  +--------+
|tNutzer   |  |tThema  |  |tBeitrag |  |tOnline |  |tBlock  |
+----------+  +--------+  +---------+  +--------+  +--------|
|NutzerID  |  |ThemaID |  |BeitragID|  |OnlineID|  |BlockID |
|NutzerName|  |NutzerID|  |ThemaID  |  |NutzerID|  |NutzerID|
+----------+  +--------+  |NutzerID |  +--------+  +--------+
                          +---------+
Nun meine Frage, wie schaffe ich es, alle hier gezeigten Tabellen von der NutzerID in der tNutzer Tabelle abhängig zu machen? Wenn beispielsweise der Nutzer in der tNutzer Tabelle gelöscht wird, dann sollen auch automatisch die anderen Tabellen davon profitieren. Oder muss ich diesen Löschvorgang auf jeden einzelne Tabelle durchführen?

// Nachtrag: In jeder Tabelle hat die NutzerID die Eigenschaten: Integer, 11; Nutzen tu ich MariaDB 10 mit dem Typ InnoDB
 
Lösung
So, kann geschlossen werden.

Nachdem ich nun für jede Tabelle den CREATE TABLE Befehl manuell eingetippert und auch überall ein CONSTRAINT Befehl eingefügt habe, hat es letztendlich geklappt.

Auch habe ich alle Integers auf UNSIGNED gestellt und die Zeichencodierung von UTF8MB4 auf UTF8 geändert.
So sehen die Strukturen meine Datenbank aus:
SQL:
-- phpMyAdmin SQL Dump
-- version 4.9.0.1
-- [URL='https://www.phpmyadmin.net/']phpMyAdmin[/URL]
--
-- Host: 127.0.0.1
-- Erstellungszeit: 21. Aug 2019 um 12:28
-- Server-Version: 10.3.16-MariaDB
-- PHP-Version: 7.3.6

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Datenbank: `nutzerverwaltung`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `tbeitrag`
--

CREATE TABLE `tbeitrag` (
  `BeitragID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `ThemaID` int(11) NOT NULL,
  `NutzerID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `tblock`
--

CREATE TABLE `tblock` (
  `BlockID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `NutzerID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `thema`
--

CREATE TABLE `thema` (
  `ThemaID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `NutzerID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `tnutzer`
--

CREATE TABLE `tnutzer` (
  `NutzerID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `NutzerName` varchar(75) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `tonline`
--

CREATE TABLE `tonline` (
  `OnlineID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `NutzerID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Ob Signed oder Unsigned steht, habe ich bereits getestet. Leider keine Änderung.
 
Zuletzt bearbeitet:
So, kann geschlossen werden.

Nachdem ich nun für jede Tabelle den CREATE TABLE Befehl manuell eingetippert und auch überall ein CONSTRAINT Befehl eingefügt habe, hat es letztendlich geklappt.

Auch habe ich alle Integers auf UNSIGNED gestellt und die Zeichencodierung von UTF8MB4 auf UTF8 geändert.
 
Zuletzt bearbeitet:
Lösung
Zurück