webForumDet fria alternativet

Radera från kopplingstabeller

3 svar · 389 visningar · startad av Razofish

RazofishMedlem sedan sep. 2000780 inlägg
#1

Hej!

Jag har tre tabeller som ser ut så här:

CREATE TABLE `bokningsrad` (
  `brid` mediumint(8) unsigned NOT NULL auto_increment,
  `start` datetime NOT NULL default '0000-00-00 00:00:00',
  `slut` datetime NOT NULL default '0000-00-00 00:00:00',
  `aktiv` tinyint(1) NOT NULL default '0',
  `pris` smallint(6) NOT NULL default '0',
  `vecka` tinyint(3) NOT NULL default '0',
  `personnr` varchar(10) NOT NULL default '8303142718',
  `bokningsnr` smallint(5) NOT NULL default '0',
  PRIMARY KEY  (`brid`),
  KEY `vecka` (`vecka`),
  KEY `personnr` (`personnr`),
  KEY `bokningsnr` (`bokningsnr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `skapa_stuga` (
  `brid` mediumint(8) NOT NULL default '0',
  `stugid` smallint(5) NOT NULL default '0',
  PRIMARY KEY  (`brid`,`stugid`),
  KEY `stugid` (`stugid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `stuga` (
  `stugid` smallint(5) unsigned NOT NULL auto_increment,
  `stugnamn` varchar(255) NOT NULL default '',
  `hpris` varchar(255) NOT NULL default '',
  `mpris` varchar(255) NOT NULL default '',
  `lpris` varchar(255) NOT NULL default '',
  `antal_baddar` char(2) NOT NULL default '',
  `extra_baddar` char(2) NOT NULL default '',
  `pris_extra_baddar` varchar(255) NOT NULL default '',
  `antal_rum` char(2) NOT NULL default '',
  `el` varchar(255) NOT NULL default '',
  `yta` varchar(255) NOT NULL default '',
  `beskrivning` text,
  PRIMARY KEY  (`stugid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Då skapa_stuga är en kopplingstabell mellan bokningsrad och stuga så vill jag ju givetvis inte ha kvar några rader där utifall att jag raderar ett brid eller stugid. Jag har läst lite om att de främmande nycklarna kan lösa detta?

DBMSen är MySQL.

Hopppas ni förstår min fråga ;)

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Ange on delete cascade när du defineriar dina främmande nycklar.

RazofishMedlem sedan sep. 2000780 inlägg
#3

Nu har jag:

CREATE TABLE skapa_stuga (
brid mediumint(8) NOT NULL,
stugid smallint(5) NOT NULL,
PRIMARY KEY (brid,stugid),
FOREIGN KEY (brid) REFERENCES bokningsrad ON DELETE CASCADE,
FOREIGN KEY (stugid) REFERENCES stuga ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Men det fungerar inte :l

För följande kod ska väl fungera?

DELETE FROM bokningsrad where brid=1;

Då bör väl raden som har brid=1 försvinna från skapa_stuga?

tohaMedlem sedan dec. 1999707 inlägg
#4

kod:--------------------------------------------------------------------------------
DELETE FROM bokningsrad where brid=1;
--------------------------------------------------------------------------------
Då bör väl raden som har brid=1 försvinna från skapa_stuga?

Tycker det låter riktigt. :q Alla rader i skapa_stuga som har brid = 1 kommer att försvinna.

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)