Einzelnen Beitrag anzeigen

Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

Race Conditions mit DBs vermeiden

  Alt 1. Jan 2008, 20:41
Datenbank: tut nichts zur Sache ;-) • Zugriff über: nur gedanklich :-P
Hi @ll,

ich habe folgednes Problem:
Eine Datenbank mit 2 Tabellen

Tabelle 1:
id INT
...

Tabelle 2:
tab1id INT
...

Also jeder Datensatz aus Tabelle 2 bezieht sich auf einen Datensatz in Tabelle 1. In Tabelle 2 soll es keine Datensätze geben, deren Feld tab1id sich nicht auf eine id aus der Tabelle 1 bezieht.

Jetzt will ich einen neuen Datensatz in Tabelle 2 einfügen. Die Tabelle 1 enthält aktuell nur einen Datensatz mit der id 42. Auf diesen soll sich der neue Datensatz aus Tabelle 2 beziehen. Mir ist auch klar, dass sich der neue Datensatz in Tabelle 2 auf den Datensatz mit der id 42 aus Tabelle 1 beziehen soll. Also könnte ich den neuen Datensatz einfach einfügen:
INSERT INTO tabelle2 (tb1id) VALUES (42) Jetzt habe ich aber das Problem, dass der Datensatz aus Tabelle 1 längst gelöscht sein könnte. Was tue ich um zu verhindern, dass der neue Datensatz eingefügt wird, wenn der Datensatz aus Tabelle 1 nicht mehr existiert? Einfach vorher nochmal mit
SELECT COUNT(*) FROM tabelle1 WHERE id=42 prüfen, ob der Datensatz noch existiert? Dadurch wird es schonmal extrem unwahrscheinlich, dass ich mir das genannte Problem einhandle, weil der Datensatz aus Tabelle 1 gelöscht werden müsste nachdem ich geprüft habe ob er existiert und bevor ich den neuen Datensatz einfüge.
Eine DB nehmen, die Fremdschlüssel beherscht, diese entsprechend definieren und alle Sorgen los sein?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat