gpt4 book ai didi

mysql - MySQL 中的 SELECT FOR UPDATE 有多安全

转载 作者:行者123 更新时间:2023-11-28 23:30:34 25 4
gpt4 key购买 nike

这是我的查询:

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
DROP TEMPORARY TABLE IF EXISTS taken;

CREATE TEMPORARY Table taken(
id int,
invoice_id int
);

INSERT INTO taken(id, invoice_id)
SELECT id, $invoice_id FROM `licenses` l
WHERE l.`status` = 0 AND `type` = $type
LIMIT $serial_count
FOR UPDATE;

UPDATE `licenses` SET `status` = 1
WHERE id IN (SELECT id FROM taken);

如果我要面对高并发,上面的查询是线程安全的吗?我的意思是我不想分配已经分配给另一个记录的记录。

最佳答案

使用 FOR UPDATE 语句,您将锁定所有选定的许可证,直到您执行更新,因此您可以确保这些记录不会出现并发问题。

我能看到的唯一问题是,如果您的查询需要大量时间来执行(您希望在每个查询中处理多少个许可证?)并且其他查询需要 licenses(甚至阅读查询被锁定)同时,您的系统将变慢。

关于mysql - MySQL 中的 SELECT FOR UPDATE 有多安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37455146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com