k0ffeMedlem sedan maj 2003352 inlägg Hej!
Jag har två tabeller, låt säga; tbl_parent, tbl_child. Den sistnämnde har en referens till tbl_parent.
tbl_parent
------------
ID | text
23 | pappa
24 | pappa 2
25 | mamma
tbl_child
------------
ID | parentID | text
13 | 23 | barn 1
14 | 24 | barn 2
Om jag nu raderar posten "pappa" i tbl_parent så vill jag göra något av följande alternativ:
1. Antingen uppdatera alla nedanstående ID:n med -1 (för att då referera "barn 1" i tbl_child till "pappa 2" i tbl_parent).
2. Eller, uppdatera parentID i tbl_child med +1.
Hur skulle ni smidigast lösa detta?
spangoMedlem sedan juni 20008 205 inlägg Med cascading updates. DBMS?
k0ffeMedlem sedan maj 2003352 inlägg Men går det verkligen? Det är ju ingen update jag ska göra, utan en delete. Cascade delete skulle väl isåfall radera mina foreign keys.
DBMS är mySQL.
spangoMedlem sedan juni 20008 205 inlägg D'oh, borde kanske ta och läsa mer än rubriken ;)
Du får göra en trigger som lyssnar på delete.
http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
k0ffeMedlem sedan maj 2003352 inlägg Intressant!
Något sånt här kanske?
CREATE TRIGGER parent_delete BEFORE DELETE ON parent
FOR EACH ROW BEGIN
UPDATE parent SET ID = OLD.ID - 1
END;
Men hur får jag den att gälla från och med den raderade posten?
Raderar jag ID nr 10 så ska ju nr 11 och uppåt minska med 1, men nr 9 och neråt ska kvarstå?
UPDATE parent SET ID = OLD.ID - 1 WHERE ID > "deletedID" ?
?
spangoMedlem sedan juni 20008 205 inlägg Sätter du ID till OLD.ID - 1 kommer alla uppdaterade poster få den raderade postens ID-1, vilket väl inte är målet? Det borde bli typ UPDATE parent SET ID = ID - 1 WHERE ID > OLD.ID
k0ffeMedlem sedan maj 2003352 inlägg Ok!
Och "OLD.ID" innebär den raderade postens ID?
spangoMedlem sedan juni 20008 205 inlägg Det verkar inte bättre...
Manualen skrev:
You can refer to columns in the subject table (the table associated with the trigger) by using the aliases OLD and NEW. OLD.col_name refers to a column of an existing row before it is updated or deleted. NEW.col_name refers to the column of a new row to be inserted or an existing row after it is updated.