Czy jest możliwe, aby UPDATE
wiersz, a następnie SELECT
zaktualizowanych danych z tego samego wiersza wewnątrz tej samej transakcji bez obawy wystąpienia zakleszczenia?UPDATE i WYBIERZ wiersz w tej samej transakcji
Odpowiedz
Aby to zrobić, należy użyć klauzuli OUTPUT
.
Update table_name
set col1='some_value'
output inserted.*
Tak, jeśli działają w tej samej transakcji oba oświadczenia nie powinny impasu między nimi
Jeśli boisz deadlocking z innych transakcji, należy zminimalizować blokady spowodowanej transakcji, wykorzystując zindeksowaną klauzulę WHERE
w UPDATE
i jeśli to możliwe unikanie poziomu izolacji SERIALIZABLE
. (ReadCommitted Ci się podoba?)
Tak, powinno być dobrze. Zakleszczenie występuje, gdy dwie oddzielne sesje SQL próbują uzyskać dostęp do tego samego rekordu w tym samym czasie. Ponieważ Aktualizacja i Wybór odbywają się w tej samej Transakcji, zmusza je do wystąpienia sekwencyjnego. Jeśli jednak Twoja transakcja prowadzi wiele źródeł, może to spowodować zakleszczenie.
aby wybrać wstawiony wartość użyć następującego zapytania
UPDATE SET maths = 20,biology = 21 OUTPUT INSERTED.maths, INSERTED.biology WHERE student_id = 12
aby wybrać wartość użytkową poprzednia
UPDATE SET maths = 20 OUTPUT DELETED.maths WHERE student_id = 12
- 1. JDBC: klucz obcy na PK tworzony w tej samej transakcji
- 2. MySql UPDATE z SUM w tej samej tabeli
- 3. SQL Server - Update kolumna z danymi w tej samej tabeli
- 4. wybierz wiersz i element w awk
- 5. Blender Python wybierz obiekt w obrębie tej samej grupy?
- 6. Wybierz górny i dolny wiersz
- 7. UPDATE szybciej w SQLite + rozpocząć transakcji
- 8. jqTransform Update Wybierz opcje
- 9. jQuery wybierz zmianę zdarzenia po wybraniu tej samej wartości
- 10. Wiersz UPDATE, gdy pasujący wiersz istnieje w innej tabeli
- 11. Użytkownicy tej samej sieci używają tej samej sesji
- 12. Echoing w tej samej linii
- 13. Pisanie w tej samej linii w FORTRAN
- 14. TopShelf zainstalować wiele tej samej usługi na tej samej maszynie
- 15. linq wybierz losowy wiersz
- 16. Wybierz wiersz tabeli w jQuery
- 17. Funkcja i zmienna o tej samej nazwie
- 18. Typedef i enum o tej samej nazwie?
- 19. sqlalchemy, wybierz cały wiersz
- 20. Używanie dwóch bibliotek DLL o tej samej nazwie i tej samej przestrzeni nazw
- 21. Dlaczego dane wejściowe i wybrane nie mają tej samej szerokości?
- 22. Aktualizacja każdy wiersz o wartości od innej kolumny z tej samej tabeli
- 23. Klucz obcy MySQL na tej samej tabeli
- 24. partycjami i UPDATE
- 25. Wybierz wiersz po odświeżeniu DBGrid
- 26. Aktualizacja tabeli w wyzwalaczu po aktualizacji w tej samej tabeli
- 27. SELECT i UPDATE wiele rekordów w oriento/orientjs i transakcji w linii wodnej
- 28. Wybierz pierwszy wiersz w połączeniu dwóch tabel w jednym oświadczeniu
- 29. wywoływanie tej samej funkcji nazwy
- 30. Wiele programów ładujących w tej samej działalności
Thats dużo lepiej :) – Juan