在 MySQL 中,可以使用以下方式手动请求行级锁并等待另一个事务释放锁:
在事务中查询要操作的数据,并加上
FOR UPDATE
锁定该数据行。START TRANSACTION; SELECT * FROM table_name WHERE condition_column = 'value' FOR UPDATE;
如果另一个事务已经锁定了该行,当前事务会被阻塞,等待其他事务释放锁。
当前事务会一直等待直到获取到锁或达到设置的超时时间。可以使用
innodb_lock_wait_timeout
参数设置超时时间,默认为 50 秒。一旦获得了所需的行级锁,就可以执行相应的操作。完成后,提交或回滚当前事务。
COMMIT; -- 或者 ROLLBACK;
请注意,在使用行级锁时要小心处理并发冲突和死锁情况。合理规划和设计数据库架构以及优化查询语句也是避免出现长时间等待的重要因素。
内容由零声教学AI助手提供,问题来源于学员提问