FOR UPDATE

In Apex, you can use FOR UPDATE to lock sObject records while they’re being updated in order to prevent race conditions and other thread safety problems.

While an sObject record is locked, no other client or user is allowed to make updates either through code or the Salesforce user interface. The client locking the records can perform logic on the records and make updates with the guarantee that the locked records won’t be changed by another client during the lock period. The lock gets released when the transaction completes.

You can’t use the ORDER BY clause in any SOQL query that uses locking.

Note

To lock a set of sObject records in Apex, embed the keywords FOR UPDATE after any inline SOQL statement. This example queries for two accounts and also locks the accounts that are returned.
1Account [] accts = [SELECT Id FROM Account LIMIT 2 FOR UPDATE];

Use care when setting locks in your Apex code. For details, see Locking Records in the Apex Developer Guide.

Warning