webForumDet fria alternativet
Logga in / Bli medlem

Problem med delete

Databaser & SQL

9 svar · 511 visningar · startad av Pedda

Medlem sedan juni 20006 031 inlägg
Frågan#1

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.

Medlem sedan juni 200032 967 inlägg
#2

Sätt upp foreign keys med "on delete cascade".

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

Mvh

Medlem sedan juni 20006 031 inlägg
#3

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.

Medlem sedan dec. 20025 483 inlägg
#4

Hur är tabellerna definierade? Visa vad SHOW CREATE TABLE tabellnamn ger för alla inblandade tabeller.

Medlem sedan juni 20006 031 inlägg
#5

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());
Medlem sedan dec. 20025 483 inlägg
#6

Har du satt INNODB på samtliga tabeller?

Medlem sedan juni 20006 031 inlägg
#7

Peter S skrev:

Har du satt INNODB på samtliga tabeller?

Ja

Medlem sedan dec. 20025 483 inlägg
#8

En liten sökning gav bl.a. följande:
http://forums.mysql.com/read.php?22,19755,43805#msg-43805

Medlem sedan juni 20006 031 inlägg
#9

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.

Medlem sedan juni 20006 031 inlägg
#10

Verkar funka som det ska. :)

264 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)