如何在MySQL中锁定一行?

时间:2011-05-02 14:36:11

标签: mysql database locking innodb row

我正在开发一个CRM桌面应用程序,该应用程序一次将由多个代理使用,所有代理都将通过相同的客户列表。我需要做的是避免代理之间的冲突,所以一旦代理从列表中选择一个客户,其他人就不应该再看到那一行了,或者换句话说他们不应该选择那个客户排到第一个代理完成之前!最简单的方法可能听起来很愚蠢是添加两个字段LOCK(BIT),LOCK_EXPIRY(DATETIME)并管理它。我不知道但我认为应该有另一种方法来锁定特定会话的行。我在Google上搜索过,我发现了两种InnoDB锁定方法,但我不确定在这种情况下这些方法是否可以帮助我。

2 个答案:

答案 0 :(得分:1)

我建议你添加你描述的两个字段,除了用LOCKED_BY(AGENT_ID)替换LOCK(BIT)。否则,如果锁定了客户列表的代理刷新了他/她的页面,则锁定的行可能会在锁定到期之前消失。

答案 1 :(得分:0)

我认为您可以在MySQL中使用GET_LOCK()函数:

http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_get-lock