update with transaction