Vinnaren i pepparkakshustävlingen!
2010-12-16, 19:41
  #1
Medlem
Hej!

Jag skulle behöva lite hjälp med foreign keys i MySQL. Det jag vill åstadkomma är att om jag lägger till ett värde i min tabell resor på attributet destination så vill jag att den istället läggs till i min tabell destination.

destination
Kod:
CREATE TABLE IF NOT EXISTS `destination` (
  `id` int(11) NOT NULL auto_increment,
  `destination` varchar(255) NOT NULL,
  `country` varchar(255) default NULL,
  `currency` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
)

resor
Kod:
CREATE TABLE IF NOT EXISTS `resor` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(40) default NULL,
  `street` varchar(40) default NULL,
  `destination` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `fk_destination_id` (`destination`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Ger mig felet:
Kod:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`my_table/resor`, CONSTRAINT `fk_destination_id` FOREIGN KEY (`destination`) REFERENCES `destination` (`id`)) 

Jag vill även att den ska behålla sthlm i destination även om jag tar bort värdet från resor och om jag lägger till sthlm i resor igen efter att ta bort det så vill jag inte att läggs till två gånger i destination. Kommer det att fungera så?

Tacksam för svar och hjälp!
__________________
Senast redigerad av mojitoboy 2010-12-16 kl. 20:26.
Citera
2010-12-16, 20:18
  #2
Medlem
Hur skriver du INSERT satsen?
Citera
2010-12-16, 20:24
  #3
Medlem
Citat:
Ursprungligen postat av PerWi
Hur skriver du INSERT satsen?

Jag skriver den som följer:

Kod:
INSERT INTO  `my_table`.`resor` (

`id` ,
`name` ,
`street` ,
`destination`
)
VALUES (
NULL , NULL , NULL ,  'sthtml'
)
Citera
2010-12-16, 20:37
  #4
Medlem
Ärligt talat förstår jag inte riktigt vad du vill göra...

Men först och främst har du ju NOT NULL på ID så klart när du kör AUTOINCREMENT så det funkar inte...

Sen har du ingen INSERT mot destinationstabellen, hur ska den veta att du skickar in värden till den? Du måste göra två INSERT, smidigast är kanske om du gör en Store Procedure som hanterar det.

I destinations tabellen skulle du kunna mata in värden och sen kopplar du ID:et för varje destination till en resa i resor tabellen.

EDIT: Såg även att destination är int i den ena och varchar i den andra, rätta mig om jag har fel men tror inte det blir bra.
__________________
Senast redigerad av PerWi 2010-12-16 kl. 20:40.
Citera
2010-12-16, 20:57
  #5
Medlem
Citat:
Ursprungligen postat av PerWi
Ärligt talat förstår jag inte riktigt vad du vill göra...

Men först och främst har du ju NOT NULL på ID så klart när du kör AUTOINCREMENT så det funkar inte...

Sen har du ingen INSERT mot destinationstabellen, hur ska den veta att du skickar in värden till den? Du måste göra två INSERT, smidigast är kanske om du gör en Store Procedure som hanterar det.

I destinations tabellen skulle du kunna mata in värden och sen kopplar du ID:et för varje destination till en resa i resor tabellen.

EDIT: Såg även att destination är int i den ena och varchar i den andra, rätta mig om jag har fel men tror inte det blir bra.

Det jag vill göra är egentligen väldigt "enkelt" men jag vet inte om det är genomförbart, om det är så skulle jag gärna vilja ha hjälp med hur man gör.

Låt oss säga att jag har två skilda tabeller, destination och resor. I resor som är min huvudtabell vill jag skapa en referens till destinations tabellen. Jag vill kunna lägga till saker i båda tabellerna genom att bara göra en insert i tabellen resor som sen lägger till den rätt.

Jag har tänkt mig följande:
Jag vill lägga till sthlm som destination i resor. Så jag gör en INSERT INTO resor(destination) VALUES(sthlm) som sedan automatiskt ska lägga till den i destination. Jag vill helt enkelt att id i destinationtabellen ska sättas in i resors kolumn destination och på sätt skapa en relation.

Jag är säkert sämst på att förklara men jag vet inte riktigt hur jag ska förklara det för att du ska förstå.
Citera
2010-12-17, 07:55
  #6
Medlem
Jag är ingen expert men jag tror det blir svårt att göra som du vill... du måste nog ha två INSERT om du ska sätta in i två tabeller.

Jag tycker strukturen på dina tabeller ser lite konstig ut, läs på och testa!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback