Beste php-ers,

Ik probeer nu al een tijdje een simpele foreign key aan te maken maar steeds krijg ik een errornummer 150 terug van mysql.

Allebei de tabellen zijn leeg en bevatten dus geen records:


CREATE TABLE `ban` (
  `ban_id` int(11) NOT NULL,
  `ban_gebruiker_id` int(11) NOT NULL,
  PRIMARY KEY  (`ban_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



CREATE TABLE `gebruikers` (
  `gebruikers_id` int(11) NOT NULL,
  PRIMARY KEY  (`gebruikers_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



Ik voer dit uit:

ALTER TABLE gebruikers ADD FOREIGN KEY(gebruikers_id) REFERENCES ban(ban_gebruikers_id) ON DELETE SET NULL ON UPDATE CASCADE



Vervolgens krijg ik deze error:
#1005 - Can't create table '.\test\#sql-f6c_12af.frm' (errno: 150)

Waarom krijg ik toch die error te zien?
SanThe heeft gelijk InnoDB staat bekend om zijn foreignkey support. Ik ga het uitzoeken en laat het je nog weten HellRazer, als de topic gesloten is PM ik je wel.
Probeer je foreign key eens een naam te geven. InnoDB vereist dat elke foreign key een unieke naam heeft. Anders krijg je dit soort cryptische foutmeldingen.

PS - MyIsam ondersteund sowieso geen FK.
PS2 - Sowieso zit er een typo in je add FK, ban_gebruikers_id.
MyISAM heeft volgens mij geen foreignkeys.
Dat weet ik wel zeker ook. MyISAM slikt zulke queries wel en geeft geen errors o.i.d., maar in werkelijkheid doet ie het gewoon niet.

@TS:
Jij verwijst nu met een PK naar een FK, terwijl het andersom moet.
ALTER TABLE ban ADD FOREIGN KEY ban_gebruiker_id REFERENCES gebruikers (gebruikers_id) ON DELETE SET NULL ON UPDATE CASCADE;

Wellicht kun je hem een naampje geven, met de bovenstaande geeft MySQL hem zelf een naampje volgens mij:
ALTER TABLE ban ADD CONSTRAINT fk_bans_gebruikers FOREIGN KEY ban_gebruiker_id REFERENCES gebruikers (gebruikers_id) ON DELETE SET NULL ON UPDATE CASCADE;
Hartelijk bedankt voor je post. Ik was er inmiddels ook achter dat ik ze verkeerd om had. Dit is nu allemaal gelukt maar nu rest mij nog enkel 1 probleem, namelijk:

Ik heb een tabel gebruikers met onder andere een kolom:
- gebruikers_id INT Primery Key auto_increment

En ik heb een tabel ban met onder andere 2 kolommen:
- ban_id INT Primery Key auto_increment
- ban_gebruikers_id INT

Nu heb ik de ban_gebruikers_id kolom gekoppeld aan gebruikers_id alleen wil ik dat op moment dat er een gebruiker verwijderd word uit de gebruikerstabel de ban_gebruikers_id in de ban tabel op NULL word gezet.

Alleen ik krijg dat niet voor elkaar omdat de gebruikers_id een NOT NULL eigenschap heeft omdat deze de Primery Key is en de eigenschap auto_increment heeft.


Wat moet ik hieraan doen?


Edit: ik heb het voor elkaar gekregen. Kon hem gewoon aanpassen.
HellRazer, je kunt het record toch verwijderen ? Als de van uitgeschakeld wordt kun je de ban_gebruiker record logischerwijs weggooien toch ?

Jan Willem bedankt voor de post
Ik ben weer een stuk wijzer geworden. Bedankt voor jullie hulp allemaal.

Reageren