用于更新的MySQL行锁不起作用

用于更新的MySQL行锁不起作用,mysql,Mysql,我有一个高流量的IVR系统,它使用MySQL作为数据库服务器 打电话时,我需要选择一名免费代表并锁定他,以便其他来电者不能同时选择他 我正在做的是: SELECT id FROM admins WHERE live = 1 AND available = 1 ORDER BY RAND() LIMIT 1 FOR UPDATE 问题是,这对我来说真的不起作用。知道我做错了什么吗 注意:我使用InnoDB作为引擎。更新锁意味着其他进程无法写入记录,允许读取。还要记住,当一致性级别为read_UN

我有一个高流量的IVR系统,它使用MySQL作为数据库服务器

打电话时,我需要选择一名免费代表并锁定他,以便其他来电者不能同时选择他

我正在做的是:

SELECT id FROM admins WHERE live = 1 AND available = 1 ORDER BY RAND() LIMIT 1 FOR UPDATE
问题是,这对我来说真的不起作用。知道我做错了什么吗


注意:我使用InnoDB作为引擎。

更新锁意味着其他进程无法写入记录,允许读取。还要记住,当一致性级别为read_UNCOMMITTED时,几乎总是允许读取,并且您可能会使用该级别获得过时的数据。请阅读有关此选项的文章:否,您不能阻止选择。那样的话,性能就很慢了。您可以做的是阻止其他人在您更改数据时对其进行干扰。这就是
选择的内容。。。用于更新的
用于。依我看,不要担心你知道它正在被更改,并且所有当前的查询都有错误的数据。如果重要的话,他们会在以后了解。那么,有什么办法解决这个问题吗?我不能让两个呼叫者选择同一个自由代表?锁定更新意味着,其他进程不能写入记录,允许读取。还要记住,当一致性级别为read_UNCOMMITTED时,几乎总是允许读取,并且您可能会使用该级别获得过时的数据。请阅读有关此选项的文章:否,您不能阻止选择。那样的话,性能就很慢了。您可以做的是阻止其他人在您更改数据时对其进行干扰。这就是
选择的内容。。。用于更新的
用于。依我看,不要担心你知道它正在被更改,并且所有当前的查询都有错误的数据。如果这很重要的话,他们以后会知道的。那么,在我不能让两个打电话的人选择同一个免费代表的情况下,有什么办法解决这个问题吗?