我有以下mysql表:
myTable的:
id int auto_increment
voucher int not null
id_user int null
我已经使用1到100000的值填充了凭证字段,因此我有100000条记录;当用户点击PHP页面中的按钮时,我需要为用户分配一条记录,所以我做了类似的事情:
更新myTable设置id_user = XXX在哪里 凭证=(SELECT * FROM(SELECT MIN(凭证)FROM myTable WHERE id_user为null)v);
问题是我不使用锁,我应该使用它们,因为如果两个用户在同一时刻点击我冒险将相同的凭证分配给不同的人(同一记录中的2个更新,所以我失去了1个用户) ...
我认为必须有正确的方法来做到这一点,你能帮帮我吗? 谢谢 ! 克里斯
答案 0 :(得分:0)
如果您真的想序列化您的流程,可以在事务开始时获取一个Lock Tables表名,并在完成后解锁表。
如果您使用的是Innodb和交易,则必须在交易开始后执行锁定表。
我不是在提倡这种方法,因为通常有一种更好的处理方式,但是如果你需要一个快速而肮脏的解决方案,这将只需要少量的代码更改。