webForumDet fria alternativet

Radera från kopplingstabeller

Databaser & SQL

3 svar · 389 visningar · startad av Razofish

Medlem sedan sep. 2000780 inlägg
Frågan#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 ;)

Medlem sedan dec. 200012 464 inlägg
#2

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

Medlem 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?

Medlem 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.

294 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
157 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)