only use transactions when changing data