Permalänk
Medlem

Mysql Foreign key problem

Hejsan!
Jag sitter med ett litet projekt där jag kommer lagra olika vandrings/löpar spår i en mysql databas. Använder mig av två tabeller, en som representerar spåret med ett id och namn, och en tabell som lagrar alla sträckor som ett spår består av med koordinater och id för det spår sträcken finns i. Jag använder mig av foreign key för att koppla en sträcka med ett spår. För jag vill att när man lägger till en sträcka så måste den kopplas samman med ett befintligt spår. Men detta får jag inte att fungera. Det fungerar ändå att lägga till en sträcka fast spår id:et inte existera.
Mina tabeller ser ut så här:

create table routes(
routeid integer auto_increment,
name char(20),
primary key(routeid)
);

create table routecords(
cordid integer auto_increment,
routeid integer,
cords varchar(50),

foreign key (routeid) REFERENCES routes(routeid),
primary key(cordid)
);

Kan ej se vad som är fel. Var ett tag sedan jag satt med mysql, men jag trodde att foregin key gjorde i detta fallet att när jag skapar en routecords entry så måste det cordid jag väljer finnas i routes om det ska gå. Men just nu fungerar det inte så.
Använder mig av mysql version 5.1.53 med wamp.
Skulle vara tacksam för all hjälp.
mvh magnus

Visa signatur

Jag har en grm dator

Permalänk
Medlem

Prova följande:

create table routecords(
cordid integer NOT NULL auto_increment,
routeid integer NOT NULL,
cords varchar(50) DEFAULT NULL,

foreign key (routeid) REFERENCES routes(routeid) ON UPDATE CASCADE,
primary key(cordid)
);

Se till så du använder InnoDB som motor också. (eller iaf en som stödjer foreign keys)

Permalänk
Medlem

tack för svaret. Tror det har med InnoDb att göra som du säger. har testat att aktivera det i my.ini och ändra default storage och ta bort alla markeringar som gäller för InnoDB. Men det fungerar fortfarande inte. Vet inte om jag kanske ska testa med en annan version av wamp.

Visa signatur

Jag har en grm dator

Permalänk
Medlem

Du anger motor per tabell så när du skapar din tabell kan du, för att vara på den säkra sidan, ange vilken motor du vill använda för tabellen.

CREATE TABLE `routecords` (
`cordid` int(11) NOT NULL AUTO_INCREMENT,
`routeid` int(11) NOT NULL,
`cords` varchar(50) DEFAULT NULL,
PRIMARY KEY (`cordid`),
KEY `routeid` (`routeid`),
CONSTRAINT `routecords_ibfk_1` FOREIGN KEY (`routeid`) REFERENCES `routes` (`routeid`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Även tabellen som den främmande nyckeln pekar på måste nog ha InnoDB som motor också.
Nu vet jag inte riktigt hur du administrerar din databas, om det är genom phpmyadmin eller separat program men vilket som så bör du kunna kolla upp vilken motor dina tabeller använder. Annars kan du köra en fråga:

SELECT ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'test' -- TABLE_SCHEMA = Din databas
AND TABLE_NAME = 'routecords' -- TABLE_NAME = Din tabell (duh!)

Permalänk
Medlem

Tack så mycket fungerar bra nu ^^.
Gjorde så att jag la till ENGINE=InnoDB DEFAULT CHARSET=latin1; för varje tabell så löste det sig.

Visa signatur

Jag har en grm dator