gpt4 book ai didi

mysql - 在 InnoDB 中使用自动增量行为模拟 MyISAM 的复合主键

转载 作者:可可西里 更新时间:2023-11-01 07:09:02 25 4
gpt4 key购买 nike

在 MySQL 中,如果您有一个类似于以下内容的 MyISAM 表:

CREATE TABLE `table1` (
`col1` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`col2` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`col2`, `col1`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

如果您插入行,那么自动增量基数对于每个不同的 col2 值都是唯一的。如果我的解释不够清楚,this答案应该解释得更好。然而,InnoDB 并不遵循这种行为。事实上,InnoDB 甚至不允许您将 col2 作为主键定义中的第一个。

我的问题是,是否有可能在不求助于 MAX(id)+1 或类似方法的情况下以某种方式在 InnoDB 中对这种行为进行建模?我能找到的最接近的是 this ,但它适用于 PostgreSQL。

编辑:标题拼写错误

最佳答案

这是我以前使用过的 MyISAM 的一个很好的特性,但是你不能用 InnoDB 来做。 InnoDB 在启动时确定最高数字,然后将数字保存在 RAM 中并在需要时递增。

由于 InnoDB 处理同时插入/更新,它必须在事务开始时保留数字。在事务回滚时,该号码仍“使用”但未保存。因此,您的 MAX(id) 解决方案可能会给您带来麻烦。一笔交易开始,号码被预留,你在单独的交易中拉取最高的“已存”号码+1,与第一次交易预留的相同。交易完成,预留号码已保存,与您的冲突。

MAX(id) 返回最高保存的数字,而不是最高使用的数字。你可以有一个 MyISAM 表,其唯一目的是生成你想要的数字。它与您的 MAX(id) 解决方案的查询数量相同,只是一个是 SELECT,另一个是 INSERT。

关于mysql - 在 InnoDB 中使用自动增量行为模拟 MyISAM 的复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17123445/

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