#1215 - Cannot add foreign key constraint

joomsch

Benutzer
Beiträge
5
Hallo,

ich bin Anfänger was SQL angeht und ich habe ein kleines Problem beim erstellen einer Tabelle.
Ich möchte 2 Tabellen erstellen, leider erkennt es den FOREIGN KEY nicht.
Ich vermute ich habe einen kleinen Denkfehler ?


Code:
CREATE TABLE Kategorie(
KAT_ID INT(11) NOT NULL AUTO_INCREMENT,
KAT_name VARCHAR(50),
PRIMARY KEY(KAT_ID)
);


CREATE TABLE Kunde (
KUN_ID INT(11) NOT NULL AUTO_INCREMENT,
KUN_name VARCHAR(50),
KUN_ansprechpartner VARCHAR(50),
KUN_plz INT(11),
KUN_ort VARCHAR(50),
KUN_kat VARCHAR(50),
KUN_std INT(11),
PRIMARY KEY(KUN_ID),
FOREIGN KEY(KUN_kat) REFERENCES Kategorie(KAT_ID));

Es kommt folgender Fehler:
#1215 - Cannot add foreign key constraint
Leider konnte ich mit den Lösungsvorschlägen von Google leider nichts anfangen:/
Für Hilfe im Vorraus schonmal vielen Dank:)
 
Werbung:
Code:
KAT_ID INT(11) NOT NULL AUTO_INCREMENT,

KUN_kat VARCHAR(50),
Der Datentyp muss schon identisch sein damit das funktioniert. :)
 

Btw. Du bist SQL-Anfänger. MySQL mag zwar verbreitet sein, das sollte aber keine Rückschlüsse auf die Qualität nach sich ziehen. Es gibt deutlich bessere Alternativen. Ich zeig Dir mal, was PostgreSQL in dieser Situation für Fehler zeigen würde:

Code:
test=# create table m (id int primary  key);
CREATE TABLE
test=*# create table s(m_id varchar references m);
ERROR:  foreign key constraint "s_m_id_fkey" cannot be implemented
DETAIL:  Key columns "m_id" and "id" are of incompatible types: character varying and integer.
STATEMENT:  create table s(m_id varchar references m);
ERROR:  foreign key constraint "s_m_id_fkey" cannot be implemented
DETAIL:  Key columns "m_id" and "id" are of incompatible types: character varying and integer.

Die Fehlermeldung ist doch erheblich gehaltvoller, oder?

Außerdem patzt MySQL an so abartig vielen Stellen, daß man insbesonderen Anfängern davon abraten kann. Folgendes zum ausprobieren:

Code:
mysql> create table m (id int primary key) engine innodb;
Query OK, 0 rows affected (0.04 sec)

mysql> create table s(m_id int references m(id)) engine innodb;
Query OK, 0 rows affected (0.02 sec)

mysql> insert into s values (4711);
Query OK, 1 row affected (0.00 sec)


Du siehst den Fehler? MySQL scheinbar nicht...
 
Werbung:
Die Fehlermeldung ist doch erheblich gehaltvoller, oder?
Da hast du recht. Gibt eindeutig mehr Informationen her als MySQL^^
Werde mir Postgres mal anschauen, wie gesagt bin Anfänger und weiß noch nicht so recht was gut und nicht ist.
Vielen Dank trotzdem nochmal allen für die schnelle und vor allem ausführliche Hilfe :)
 
Zurück
Oben