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.
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" ?
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
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.
133 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe