Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 并行查询-选择和更新-选择太快或更新太慢问题_Mysql_Sql_Concurrency_Transactions - Fatal编程技术网

Mysql 并行查询-选择和更新-选择太快或更新太慢问题

Mysql 并行查询-选择和更新-选择太快或更新太慢问题,mysql,sql,concurrency,transactions,Mysql,Sql,Concurrency,Transactions,我在几个线程中启动了一个脚本,它从数据库中获取一些数据 SELECT * from `base` LIMIT 1 where `used` = 0 然后更新这一行 UPDATE `base` set `used` = 1 where id ... 问题是:并行线程通常从表中获取相同的记录。无法及时更新以避免此问题 我该怎么办?谢谢你,戈登·林诺夫! 我应该使用锁表TABLEWRITE,然后解锁表 (1)用您正在使用的数据库标记您的问题。(2) 了解数据库中的表锁定。对于Postgres,我

我在几个线程中启动了一个脚本,它从数据库中获取一些数据

SELECT * from `base` LIMIT 1 where `used` = 0 
然后更新这一行

UPDATE `base` set `used` = 1 where id ...
问题是:并行线程通常从表中获取相同的记录。无法及时更新以避免此问题


我该怎么办?

谢谢你,戈登·林诺夫!
我应该使用锁表
TABLE
WRITE,然后解锁表

(1)用您正在使用的数据库标记您的问题。(2) 了解数据库中的表锁定。对于Postgres,我认为您应该使用
select。。。对于update skip locked
,使用可怕的非标准反勾表示您正在使用MySQL。最坏的情况是,使用事务,最好将其重写为单个语句,这样您就可以隐式使用一个语句,或者重写您的处理过程,这样就不再需要它了。