Mysql 锁机制有两个函数get_lock()release_lock()

get_lock

语法

SELECT GET_LOCK(key, time) 

key,就是根据这个参数进行加锁的,另一个是等待时间(s),即获取锁失败后等待多久回滚事务

示例

连接A先GET_LOCK(“lock_name”, 5),因为lock_name这个名称在之前没有加锁所以不需要等待,直接返回1,加锁成功。 然后连接B再GET_LOCK(“lock_name”, 5),等待5s,若这期间没有释放这个字段的锁,则5s过后返回0,连接B加锁失败。

这个加锁方式很危险,一旦加锁之后忘记释放,就会一直锁住,除非连接断开。第二个参数,与一般时间的理解不太一样,千万不要理解成超时时间,并不是设置一个字段的锁,然后超过这个时间就自动释放了,这个是等待时间,即第二次对同一个字段加锁,等待多久然后返回。

RELEASE_LOCK

这个就是释放锁

语法

select RELEASE_LOCK(key)

成功释放返回1

这次主要是在一个队列上吃了亏,一个数据库主机上挂了两个应用的数据库,队列是直接迁移过去的,锁的key两个应用都一样,原来两个应用在一台web服务器上,后面其中一个应用迁移到了新的web服务器,由于锁的的key是同一个的问题,导致了一个应用一直获取失败。队列直接崩掉,后面修改下锁的key就可以了。