Versio

Foreign key aanmaken

Overzicht Reageren

Zero XT

Zero XT

27/09/2009 19:00:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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?
 
PHP hulp

PHP hulp

24/05/2012 16:43:58
Gesponsorde koppelingen:
 
- SanThe -

- SanThe -

27/09/2009 19:04:00
Quote Anchor link
Can't create table '.\test\#sql-f6c_12af.frm'

Vind je de tablename niet een beetje vreemd?
 
Zero XT

Zero XT

27/09/2009 19:05:00
Quote Anchor link
Nee want die heb ik aangemaakt om te testen. tablename is dus test en heeft 2 tabellen.
 
- SanThe -

- SanThe -

27/09/2009 19:21:00
Quote Anchor link
Dit is de tabalname die jij blijkbaar wilt createn:
.\test\#sql-f6c_12af.frm
 
Zero XT

Zero XT

27/09/2009 19:22:00
Quote Anchor link
Ik wil helemaal geen tabelname aanmaken. Ik wil een foreign key aanmaken.
 
Twan van der Poel

Twan van der Poel

27/09/2009 19:25:00
Quote Anchor link
op een delete call zet je em op NULL terwijl je fields NOT NULL zijn, kun je de NOT NULL eigenschappen eruithalen en kijken wat ie dan zegt?
 
Zero XT

Zero XT

27/09/2009 19:36:00
Quote Anchor link
Bedankt voor je antwoord maar dat helpt ook helaas niet. Ik blijf dezelfde error krijgen.
 
Twan van der Poel

Twan van der Poel

27/09/2009 19:36:00
Quote Anchor link
Probeer eens MyISAM in plaats van InnoDB. zo werkt ie bij mij wel;

drop table ban;
drop table gebruikers;

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



CREATE TABLE `gebruikers` (
`gebruikers_id` int(11),
PRIMARY KEY (`gebruikers_id`),
foreign key (gebruikers_id) references
ban(ban_gebruiker_id) on delete set null on update cascade
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
- SanThe -

- SanThe -

27/09/2009 19:40:00
 
Zero XT

Zero XT

27/09/2009 20:20:00
Quote Anchor link
Bedankt het werkt. Alleen in die link staat dit:

•Both tables must be InnoDB tables and they must not be TEMPORARY tables.

Dus ik had ze InnoDB gemaakt maar het moet dus MyIsam zijn. Waarom staat er dan InnoDB?
 
- SanThe -

- SanThe -

27/09/2009 20:23:00
Quote Anchor link
MyISAM heeft volgens mij geen foreignkeys.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Twan van der Poel

Twan van der Poel

27/09/2009 20:30:00
Quote Anchor link
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.
 
Mark PHP

Mark PHP

27/09/2009 22:33:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door Mark PHP
 
Jan Willem van der Veer

Jan Willem van der Veer

28/09/2009 07:00:00
Quote Anchor link
Quote:
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;
 
Zero XT

Zero XT

28/09/2009 09:10:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door Zero XT
 
Twan van der Poel

Twan van der Poel

28/09/2009 09:15:00
Quote Anchor link
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
 
Zero XT

Zero XT

28/09/2009 09:24:00
Quote Anchor link
Ik ben weer een stuk wijzer geworden. Bedankt voor jullie hulp allemaal.
 



Overzicht Reageren

Get Adobe Flash player