Witam.
Zawsze w ramach nauki mamy przykłady zapisu danych do bazy – do jednej tabeli. Co jednak i jak zapisać do co najmniej dwóch tabel powiązanych kluczem obcym? Skąd mam 100% pewności, że poprzedni wpis do pierwszej tabeli ma ID “takie a nie inne” aby zastosować je w drugiej tabeli jako klucz obcy? Jak powinien wyglądać poprawny tok zapisu do dwóch tabel powiązanych kluczem obcym? Dziękuję za wyjaśnienie.
2 Odpowiedzi
Bardzo dziękuję za odpowiedź – oczywiście spróbuję poprawić mój błąd w zastosowanym rozwiązaniu, które omija problem.
Bazując na silnikach MySQL i MsSQL Server, nie da się zapisać danych jednocześnie do dwóch tabel.
Jeśli potrzebujesz mieć 100% pewności, że instrukcja dodania danych wykonała się poprawnie, możesz skorzystać z mechanizmu transakcji. Transakcje działają w ten sposób, że agregują wykonanie kilku instrukcji w jednej “sesji”. Na koniec sesji możesz ją odrzucić (jeśli któraś instrukcja się wysypała) lub zatwierdzić.
Co do ID dla klucza obcego, możesz skorzystać z wbudowanego pola (w MySQL) o nazwie LAST_INSERT_ID(). Wtedy, wraz z użyciem transakcji, wyglądałoby to tak:
BEGIN; INSERT INTO category ('name') VALUES ('test'); INSERT INTO articles (content, category_id) VALUES('test content', LAST_INSERT_ID()); COMMIT;