Toon posts:

[MySQL Front] Wil geen foreign key aanmaken.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben sinds kort over gestapt van Ms Sql naar MySQL, maar dat verloopt niet helemaal vlekkeloos.

Ik heb met MySQL Front een tweetal tabellen aangemaakt om eens uit te proberen hoe het allemaal werkt:

CREATE TABLE `leden` (
`lidnr` int(11) NOT NULL auto_increment,
`naam` varchar(255) NOT NULL default '',
`mailcode` int(11) default '0',
`groep` varchar(255) default NULL,
PRIMARY KEY (`lidnr`),
foreign key (`mailcode`) references `mail` on update cascade on delete cascade
) TYPE=MyISAM;

CREATE TABLE `mail` (
`mailcode` int(11) NOT NULL auto_increment,
`mail` varchar(255) NOT NULL default '',
PRIMARY KEY (`mailcode`)
) TYPE=MyISAM;

Dit doet tie zonder problemen, echter als ik bij de tabel leden kijk zie ik dat er geen foreign key is aangemaakt. Kheb het ook geprobeerd met InnoDB tabellen, maar geen succes.

Iemand een idee?

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 01:04

Gonadan

Admin Beeld & Geluid, Harde Waren
Moet je niet eerst die onderste tabel gemaakt hebben voordat je er een foreign key aan koppelt?

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
Jah dit heb ik ook gedaan, alleen ik heb even de code gekopiëerd in de volgorde waarin front ze had gezet, mijn fout.

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 18-12-2025
In MySQL Server 3.23.44 and up, the InnoDB storage engine supports checking of foreign key constraints, including CASCADE, ON DELETE, and ON UPDATE. See Section 14.2.6.4, “FOREIGN KEY Constraints”.

For storage engines other than InnoDB, MySQL Server parses the FOREIGN KEY syntax in CREATE TABLE statements, but does not use or store it. In the future, the implementation will be extended to store this information in the table specification file so that it may be retrieved by mysqldump and ODBC. At a later stage, foreign key constraints will be implemented for MyISAM tables as well.
Je moet dus in elk geval InnoDB gaan gebruiken hiervoor.
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
Is de correcte syntax. Als ik goed kijk mis je dus de indexnaam achter de tabelnaam na REFERENCES.

Verwijderd

Topicstarter
Tabellen naar Innodb gezet, volgende gedaan:

ALTER TABLE `leden`
ADD CONSTRAINT `fk_mailcode` FOREIGN KEY (`mailcode`) REFERENCES `mail` (`mailcode`)

nu krijg ik een error:

execution error #1005. Response from database: can't create table (errno 150)

Al weer iets verder, maar nog niet helemaal. Ik ga eens zoeken op dat error number.

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 04-01 15:49

JHS

Splitting the thaum.

Verwijderd schreef op dinsdag 21 februari 2006 @ 16:28:
code:
1
foreign key (`mailcode`) references `mail` on update cascade on delete cascade
Moet volgens mij
SQL:
1
constraint fk_mail foreign key (mailcode) references mail(mailcode) on update cascade on delete cascade
zijn :) .

DM!


Verwijderd

Topicstarter
Niet in Mysql front, maar dat terzijde. Ik heb het opgelost!!

Het schijnt dat je een index aan moet maken voor iedere kolom die in een constraint voor komt. Dit is nieuw voor mij, hoeft niet in MS SQL, maar het zij zo.

Ik kan weer verder, bedankt iig.
Pagina: 1