首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MariaDB自动增量问题

MariaDB自动增量问题
EN

Database Administration用户
提问于 2020-01-20 16:28:11
回答 1查看 869关注 0票数 0

使用OpenSUSE leap 15.1 10.2.29-lp151.2.9.1-x86_64来自供应商OpenSUSE (已安装)

代码语言:javascript
复制
CREATE TABLE testtab2(
    my_id2 INT AUTO_INCREMENT,
    name2 VARCHAR(10),
    comment2 VARCHAR(20),
    PRIMARY KEY (my_id2)
);

testtab.txt:

代码语言:javascript
复制
|Roger |hurray   |
|George|today    |
|Paul  |yesterday|
|John  |last year|
|Ringo |tomorrow |
代码语言:javascript
复制
LOAD DATA LOCAL INFILE 'testtab.txt' INTO TABLE testtab FIELDS TERMINATED BY '|';

适用于linenumbers (my_id) 1-5。

代码语言:javascript
复制
INSERT INTO testtab (name,comment) VALUES ('Beatles','band');

这是行数(my_id) 8-应该是6。

如果testtab.txt有8条记录,并使用INSERT INSERT 1记录,这将得到linenr (my_id) 16,这在其他表中也会发生--其中一个从199移到256。

有人能解决这个问题吗?

EN

回答 1

Database Administration用户

发布于 2020-01-20 17:44:42

这不是一个问题,但是可以预料到,记录在案的行为

AUTO_INCREMENT列通常缺少值。这是因为如果删除了一行,或者显式更新了AUTO_INCREMENT值,就永远不会重复使用旧值。使用...和InnoDB,值可以由事务保留;但是如果事务失败(例如,由于ROLLBACK),则保留值将丢失。因此,AUTO_INCREMENT值可用于按时间顺序对结果进行排序,但不用于创建数字序列。

大多数RDBMSes都是这样工作的。标识/序列/自动增量值不以随机数递增。所发生的情况是,每个会话保留和缓存特定的、通常是可配置的标识/序列/自动增量值的数量,如果会话在耗尽之前结束,则会丢弃缓存中的未使用值。

例如,会话A为其本身保留值1至5,然后会话B保留6至10。会话A使用值1、2和3并终止,因此永远不使用4和5。

如果出于某种原因,您需要一个无缝序列(实际上很少需要这样的序列),那么您必须自己实现它,但是请注意,在任何重要的工作负载下,这将是一个性能瓶颈。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/257791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档