共享锁(Shared Lock):多个事务都可以同时获取这个锁,用于读取数据,不会造成互相阻塞。
SELECT * FROM table_name WHERE field = "value" LOCK IN SHARE MODE;
排它锁(Exclusive Lock):只有一个事务可以获取这个锁,用于写入数据,其他事务不能对同一资源进行读写操作,会被阻塞。
UPDATE table_name SET field = "new_value" WHERE id = 1 FOR UPDATE;
在实际应用中,需要根据不同的场景选择不同的锁。
例如,如果需要查询一张表,但同时有可能有其他事务在修改这张表,这时候可以使用共享锁,避免被阻塞。
START TRANSACTION; SELECT * FROM table_name WHERE field = "value" LOCK IN SHARE MODE; COMMIT;
又比如,需要对一个字段进行累加操作,但又要保证操作的原子性,这时候可以使用排它锁。
START TRANSACTION; UPDATE table_name SET count = count + 1 WHERE id = 1 FOR UPDATE; COMMIT;
在使用锁的时候,需要注意避免死锁的情况,即多个事务都在等待对方释放锁而无法继续执行下去。