mysql事务和行锁
给id等于1的加行锁
事务提交或,行锁自动解开
1、For Update只能应用于SELECT语句中。
2、对于使用了For Update的SELECT语句,只有当事务提交或回滚时,所加的锁才会被释放。
3、在使用For Update时,要确保事务的隔离级别为Serializable级别,因为只有这个级别能够保证数据的完整性和一致性。
-- 开启事务
START TRANSACTION;
SELECT * FROM table_name WHERE id = 1 FOR UPDATE;
UPDATE table_name SET column_name = 'new_value' WHERE id = 1;
-- 提交事务
-- COMMIT;
-- 回滚事务
ROLLBACK;
先使用SELECT语句来选取待更新的行,并在其后添加FOR UPDATE关键字,从而将该行数据进行锁定。然后再执行UPDATE语句来更新该行数据。最后通过COMMIT确认事务完成,从而释放锁定。
For Update的应用场景
数据库更新:当数据库中某些记录需要进行修改、删除或插入时,可以使用For Update锁定这些记录,以确保数据操作的正确性和一致性。
并发控制:在并发访问情况下,多个线程可能会同时读取和写入同一份数据,使用For Update可以避免并发问题,保证数据的完整性和准确性。
事务处理:在事务中,For Update可以确保对共享资源的互斥访问,防止出现数据不一致的情况。
缓存更新:使用For Update可以在缓存中更新数据,保证在多个进程或线程中操作缓存时的数据一致性。
悲观锁控制:For Update是一种悲观锁控制方法,可以确保在对共享资源进行操作前,先将其锁定,以防止其他线程对其修改。
开启FOR UPDATE后其他事务需要等待该事务释放锁才能对该记录进行操作。
当有多个事务同时访问同一条记录时,只有一个事务能够获得锁,其他事务需要等待。如果获得锁的事务没有及时释放锁,则其他事务可能会发生死锁现象