Toon posts:

[MySQL] Foreign keys en errno: 150

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik ben bezig met het opzetten van een database en nu heb ik onder andere (samengevat) de volgende twee tabellen:

Persoon (persoonId, naam)
Getal (persoonId, getal)

De bedoeling is dat een persoon meerdere getallen kan hebben en al deze getallen worden via de tabel 'Getal' gekoppeld aan een persoon. Volgens mij lijkt het dan logisch om een foreign key te definieren zodat persoonId van 'Getal' altijd verwijst naar persoonId van 'Persoon'.

Nu heb ik dit op twee manieren geprobeerd:

1. phpMyAdmin: via Relation view proberen te koppelen. Hierbij krijg ik de foutmelding: no index defined (persoonId).

2. Via een stukje SQL code: ALTER TABLE getallen ADD FOREIGN KEY ( persoonId ) REFERENCES persoon( persoonId ). Hierbij krijg ik de foutmelding: errno: 150.

Beide tabellen zijn gedefinieerd als 'InnoDB' dus dat kan het probleem niet zijn lijkt me.

Heeft er iemand een idee wat er mis is?

  • Cloud
  • Registratie: November 2001
  • Laatst online: 18-02 09:57

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op donderdag 30 maart 2006 @ 11:53:
1. phpMyAdmin: via Relation view proberen te koppelen. Hierbij krijg ik de foutmelding: no index defined (persoonId).

Heeft er iemand een idee wat er mis is?
Punt 1 lijkt me toch duidelijk genoeg. Als je in MySQL foreign keys wilt definieren, moeten beide velden een index hebben. Anders slikt ie t niet.

Hier nog wat extra Foreign Key info, waar dit soort dingen instaan ;)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:44
Eerste hit op Google:
http://dev.mysql.com/doc/...eign-key-constraints.html
I just want to state it again, it's not that clear in the post above: Error number 1005 with reference to error 150 and CHAR/VARCHAR foreign keys. Check your COLLATION. If the one field is UTF and the other LATIN or whatever, your foreign key won't work.

phpMyAdmin gives you the error "No Index defined (fieldname)".

SHOW ENGINE INNODB tells you "Cannot find an index in the referenced table where the referenced columns appear as the first columns, or column types in the table and the referenced table do not match for constraint"

https://fgheysels.github.io/


Verwijderd

Topicstarter
Deze hit had ik inderdaad ook al gevonden. Maar met de collation lijkt niets mis. Beide tabellen zijn geheel als latin1 gedefinieerd.

In de tabel 'Persoon' staat persoonId als Primary key gedefinieerd, dus dat zou toch ook moeten werken lijkt me?

Verwijderd

Topicstarter
Grr, mijn excuses voor deze stomme vraag.

Ik had even niet door dat er onderscheid wordt gemaakt tussen een INT en een BIGINT. Blijkbaar kun je een INT niet refereren naar een BIGINT.

Toch bedankt voor jullie hulp :).