gpt4 book ai didi

mysql - mysql触发器是原子的吗?这个mysql触发器有并发问题吗?

转载 作者:行者123 更新时间:2023-11-29 23:40:21 27 4
gpt4 key购买 nike

我创建了以下触发器来使用唯一的整数值填充字段。

我在 InnoDB 表中使用它,并且该字段有一个 UNIQUE 键约束。

是否有可能两个并发插入产生相同的值,并且由于唯一约束,其中一个插入失败,或者触发器是“原子的”?

这段代码还有其他我可能没有想到的问题吗?

是否有更好的方法来获得我想要的行为?也许自动增量值有一些同构的软性?

CREATE TRIGGER `generate_customer_id` BEFORE INSERT ON `users`
FOR EACH ROW BEGIN
DECLARE i INT;
DECLARE duplicate INT DEFAULT 1;
DECLARE tries INT DEFAULT 0;
WHILE duplicate > 0 DO
SET tries = tries + 1;
IF tries > 100 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'no customer id found after 100 tries', MYSQL_ERRNO = 1001;
END IF;

SET i = ROUND((RAND() * (999999999-100000000))+100000000);
SET duplicate = (SELECT COUNT(*) FROM users WHERE customer_id = i);
END WHILE;

SET NEW.customer_id = i;
END

最佳答案

随机数生成器的一个可能的替代方案是创建 customer_ids具有 auto_increment 主键的表 - 在表中创建一个新行,为 users 创建唯一的 customer_id表

关于mysql - mysql触发器是原子的吗?这个mysql触发器有并发问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189604/

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