gpt4 book ai didi

mysql - 在 MySQL 中模拟事务安全的 SEQUENCE

转载 作者:IT王子 更新时间:2023-10-28 23:45:51 28 4
gpt4 key购买 nike

我们经常将 MySQL 与 InnoDB 存储引擎和事务一起使用,但我们遇到了一个问题:我们需要一种很好的方法来在 MySQL 中模拟 Oracle 的 SEQUENCE。要求是: - 并发支持 - 交易安全 - 最大性能(意味着最小化锁和死锁)

我们不关心某些值是否不会被使用,即序列中的间隙是可以的。有一种简单的方法可以通过创建一个带有计数器的单独 InnoDB 表来实现,但这意味着它将参与事务并引入锁和等待。我正在考虑尝试使用手动锁定的 MyISAM 表,还有其他想法或最佳实践吗?

最佳答案

如果自动增量不足以满足您的需求,您可以创建一个具有 n 个命名序列的原子序列机制,如下所示:

创建一个表来存储您的序列:

CREATE TABLE sequence (
seq_name varchar(20) unique not null,
seq_current int unsigned not null
);

假设您在表中有一行“foo”,您可以像这样自动获取下一个序列 id:

UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';
SELECT @next;

不需要锁。两条语句都需要在同一个 session 中执行,这样局部变量@next才真正在select发生时定义。

关于mysql - 在 MySQL 中模拟事务安全的 SEQUENCE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/805808/

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