Sätt upp foreign keys med "on delete cascade".
http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
Mvh
9 svar · 511 visningar · startad av Pedda
Jag har ett problem med att få min delete att fungera.
Jag har tre tabeller:
forums
id
...
threads
thread_id
ref_forumId // referens till vilket forum tråden tillhör
...
posts
post_id
ref_threadId // referens till vilken tråd posten tillhör
...
Det jag försöker få till är att när jag raderar ett forum så ska även tillhörande threads och posts raderas.
Databasen är MySQL 5.0.
Sätt upp foreign keys med "on delete cascade".
http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
Mvh
Nu har jag lagt till foreign keys med on delete cascade.
Innebär inte det att trådar och poster automatiskt ska raderas om jag kör:
$query = "DELETE FROM ".$prefix."forums WHERE id = $forumId";
Testade och forumet raderades men inte tillhörande trådar.
Hur är tabellerna definierade? Visa vad SHOW CREATE TABLE tabellnamn ger för alla inblandade tabeller.
Missade att sätta INNODB så foreign key ignorerades.
Nu gör jag något annat fel. Får felmeddelandet:
Can't create table '.\testforum\forums.frm' (errno: 150)
Felmeddelandet visar att något är fel med min foreign key, men vad?
tabellen forums skapas som den ska men sen när tabellen threads ska skapas så tar det stopp.
mysql_query("CREATE TABLE threads (
thread_id int(11) UNSIGNED NOT NULL auto_increment,
ref_forumId int(11) NOT NULL,
...
PRIMARY KEY (thread_id),
INDEX (ref_forumId),
FOREIGN KEY (ref_forumId) REFERENCES forums(id) ON DELETE CASCADE
) ENGINE=INNODB;") or die (mysql_error());
Har du satt INNODB på samtliga tabeller?
En liten sökning gav bl.a. följande:
http://forums.mysql.com/read.php?22,19755,43805#msg-43805
Tack.
Hjälpte att sätta UNSIGNED på fälten.
Nu ska jag testa att lägga in lite och radera bara så får vi se.
Verkar funka som det ska.