InnoDB supports row-level locking. Selected rows can be locked using LOCK IN
SHARE MODE or FOR UPDATE. In both cases, a lock is acquired on the rows read
by the query, and it will be released when the current transaction is
committed.

The FOR UPDATE clause of SELECT applies only when autocommit is set to 0 or
the SELECT is enclosed in a transaction. A lock is acquired on the rows, and
other transactions are prevented from writing the rows, acquire locks, and
from reading them (unless their isolation level is READ UNCOMMITTED).

If autocommit is set to 1, the LOCK IN SHARE MODE and FOR UPDATE clauses have
no effect.

If the isolation level is set to SERIALIZABLE, all plain SELECT statements are
converted to SELECT ... LOCK IN SHARE MODE.

Example
-------

SELECT * FROM trans WHERE period=2001 FOR UPDATE;

URL: https://mariadb.com/kb/en/for-update/