gpt4 book ai didi

MySQL存储过程插入验证

转载 作者:行者123 更新时间:2023-11-29 15:41:57 24 4
gpt4 key购买 nike

我有两张表承兑营业额。我们假设这些表都只有 id 列和 date 列。

我需要能够在 2 个表中插入相同的日期,最多 4 次。

例如:5 位用户正在尝试创建预订计划。

  • 5 位用户中的 3 位创建了验收计划。
  • 5 位用户中的 2 位制定了周转计划。

即使在竞争条件下,这些插入中的 1 个也应该被拒绝。

我有以下存储过程:

BEGIN
DECLARE acceptanceDateEntryCount int;
DECLARE turnoverDateEntryCount int;

SELECT COUNT(date) FROM acceptances WHERE DATE(date) = DATE(insertDate) INTO acceptanceDateEntryCount;
SELECT COUNT(date) FROM turnovers WHERE DATE(date) = DATE(insertDate) INTO turnoverDateEntryCount;

IF((acceptanceDateEntryCount + turnoverDateEntryCount) < 4) THEN
INSERT INTO acceptances (date) VALUES (insertDate);
ELSE
SIGNAL SQLSTATE
'45030'
SET
MESSAGE_TEXT = 'Cannot create acceptance schedule. Max limit of 4 same date entries are found in acceptances table and turnovers table',
MYSQL_ERRNO = '45030';
END IF;
END

注意:此存储过程仅用于创建接受预订。但是还有另一个存储过程,它是相同的,但是插入到营业额表中。

此存储过程是否足以确保即使在许多用户尝试创建预订计划的竞争条件下,如果存在相同日期的条目,则插入将被拒绝(如果它具有相同的日期)。

或者我应该放弃这个并使用悲观锁定来确保这些表上的插入不会同时运行?

最佳答案

在每个 SELECT 语句末尾添加 FOR UPDATE

还包括

START TRANSACTION;

COMMIT;

关于MySQL存储过程插入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57541476/

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