foreign key kan niet..
Hallo allemaal!
Ik heb een probleempje.
Ben nog niet super ervaren met foreign keys. Maar het leek me wel handig om er nu een te gebruiken.
Heb deze tabel:
en deze:
En nou wilde ik dus dat als er in de tabel "csv" een rij verwijderd wordt, deze rij die overeenkomt met het "csv_id" in de tabel csv_check ook verwijderd wordt.
Dus dacht ik dit te doen:
Maar dan krijg ik deze error:
Wat is hier mijn fout?
Bij voorbaat dank,
Groeten,
Boris
PS: sorry voor de backticks, had ff die tabellen uit phpMyAdmin geëxporteerd.
Ik heb een probleempje.
Ben nog niet super ervaren met foreign keys. Maar het leek me wel handig om er nu een te gebruiken.
Heb deze tabel:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
CREATE TABLE `csv` (
`csv_id` int(11) NOT NULL auto_increment,
`gebruiker_id` int(11) NOT NULL default '0',
`csv_product` varchar(255) NOT NULL default '',
`csv_merk` varchar(255) NOT NULL default '',
PRIMARY KEY (`csv_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5519 ;
`csv_id` int(11) NOT NULL auto_increment,
`gebruiker_id` int(11) NOT NULL default '0',
`csv_product` varchar(255) NOT NULL default '',
`csv_merk` varchar(255) NOT NULL default '',
PRIMARY KEY (`csv_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5519 ;
en deze:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
CREATE TABLE `csv_check` (
`csv_id` int(11) NOT NULL auto_increment,
`csv_check_hyperlinks` text NOT NULL,
`csv_check_aanbieders` int(11) NOT NULL default '0',
PRIMARY KEY (`csv_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5519 ;
`csv_id` int(11) NOT NULL auto_increment,
`csv_check_hyperlinks` text NOT NULL,
`csv_check_aanbieders` int(11) NOT NULL default '0',
PRIMARY KEY (`csv_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5519 ;
En nou wilde ik dus dat als er in de tabel "csv" een rij verwijderd wordt, deze rij die overeenkomt met het "csv_id" in de tabel csv_check ook verwijderd wordt.
Dus dacht ik dit te doen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
ALTER TABLE csv_check
ADD FOREIGN KEY ( csv_id )
REFERENCES csv (csv_id)
ON DELETE CASCADE
ON UPDATE CASCADE
ADD FOREIGN KEY ( csv_id )
REFERENCES csv (csv_id)
ON DELETE CASCADE
ON UPDATE CASCADE
Maar dan krijg ik deze error:
Wat is hier mijn fout?
Bij voorbaat dank,
Groeten,
Boris
PS: sorry voor de backticks, had ff die tabellen uit phpMyAdmin geëxporteerd.
Gesponsorde koppelingen:
Er klopt iets niet in je data model, je laat namelijk de ene primary key naar een andere primary key wijzen. Opzich kan dat nog wel (ondanks dat een relationele database niet object geörienteerd is, is dat een mogelijkheid om dat te implementeren). Het probleem zit 'm er alleen in dat beide pk's auto_increment zijn. Een auto-increment kolom die naar een andere auto_increment kolom wijst, hoewel mysql hier over blijkbaar niet zeurt, is dat toch tamelijk onmogelijk.
De foutmelding zelf heeft waarschijnlijk met de propulatie te maken, bevind zich al data in de tabellen? Is die gelijk?
De foutmelding zelf heeft waarschijnlijk met de propulatie te maken, bevind zich al data in de tabellen? Is die gelijk?
Boaz schreef op 26.05.2009 17:54:
Er klopt iets niet in je data model, je laat namelijk de ene primary key naar een andere primary key wijzen. Opzich kan dat nog wel (ondanks dat een relationele database niet object geörienteerd is, is dat een mogelijkheid om dat te implementeren). Het probleem zit 'm er alleen in dat beide pk's auto_increment zijn. Een auto-increment kolom die naar een andere auto_increment kolom wijst, hoewel mysql hier over blijkbaar niet zeurt, is dat toch tamelijk onmogelijk.
De foutmelding zelf heeft waarschijnlijk met de propulatie te maken, bevind zich al data in de tabellen? Is die gelijk?
De foutmelding zelf heeft waarschijnlijk met de propulatie te maken, bevind zich al data in de tabellen? Is die gelijk?
Bedankt voor je antwoord.
Voor een goed data model moet ik dus die auto_increment van de csv_id in csv_check halen?
En die fk is nu gelukt :) heb idd ff de tabel geleegd.
Bedankt!
brie schreef op 26.05.2009 17:58:
Bedankt voor je antwoord.
Voor een goed data model moet ik dus die auto_increment van de csv_id in csv_check halen?
Voor een goed data model moet ik dus die auto_increment van de csv_id in csv_check halen?
Dat weet ik niet, ik denk dat er geen sprake van overerving is hier en dan is dat fout. Dan blijven er nog meerdere mogelijkheden over.
Als geldt:
voor ieder record in tabel X is er ook een record in tabel Y
en:
voor ieder record in tabel Y is er ook een record in tabel X
Dan kan je de twee tabellen gewoon samen voegen.
Als alleen één van die twee geldt dan moeten de twee tabellen verschillende primary keys hebben (vergeet dan niet de unique), of kan je ze samen voegen en van de NOT NULL kolomen NULL kolomen maken.
Als allebei niet opgaat zit de fout heel ergens anders.
Bedankt voor je uitleg :)



