SELECT GET_LOCK(LockName, 5);//5代表超时时间进行操作;SELECT RELEASE_LOCK(LockName);

解决方案 »

  1.   

    是的,虽然GET_LOCK并不直接锁定一个表或者记录,但很多情况下可以模拟锁定指定的记录例如:
    要select/update时,一般需要一个关键字段的值,假设为 "white",此时就给LockName取名为改字段的值
    SELECT GET_LOCK('white', 5);SELECT * FROM tbl_name WHERE name='white';
    或者
    UPDATE tbl_name SET col1='new value' WHERE name='white';其它处理SELECT RELEASE_LOCK('white');此时其它用户(也可以理解为连接mysql的其它线程)要访问name='white'的记录做相同或不同的操作时,也按上述步骤即可实现模拟锁定的效果,当这些用户再次SELECT GET_LOCK('white', 5)时,会表现为阻塞状态,直到第一个GET_LOCK的用户释放或者超时(5秒)