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.
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
autocommit is set to 1, the LOCK IN SHARE MODE and
FOR UPDATE clauses have no effect in InnoDB. For non-transactional storage engines like MyISAM and ARIA, a table level lock will be taken even if autocommit is set to 1.
If the isolation level is set to SERIALIZABLE, all plain
SELECT statements are converted to
SELECT ... LOCK IN SHARE MODE.
SELECT * FROM trans WHERE period=2001 FOR UPDATE;