使用OpenSUSE leap 15.1 10.2.29-lp151.2.9.1-x86_64来自供应商OpenSUSE (已安装)
CREATE TABLE testtab2(
my_id2 INT AUTO_INCREMENT,
name2 VARCHAR(10),
comment2 VARCHAR(20),
PRIMARY KEY (my_id2)
);testtab.txt:
|Roger |hurray |
|George|today |
|Paul |yesterday|
|John |last year|
|Ringo |tomorrow |LOAD DATA LOCAL INFILE 'testtab.txt' INTO TABLE testtab FIELDS TERMINATED BY '|';适用于linenumbers (my_id) 1-5。
INSERT INTO testtab (name,comment) VALUES ('Beatles','band');这是行数(my_id) 8-应该是6。
如果testtab.txt有8条记录,并使用INSERT INSERT 1记录,这将得到linenr (my_id) 16,这在其他表中也会发生--其中一个从199移到256。
有人能解决这个问题吗?
发布于 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。
如果出于某种原因,您需要一个无缝序列(实际上很少需要这样的序列),那么您必须自己实现它,但是请注意,在任何重要的工作负载下,这将是一个性能瓶颈。
https://dba.stackexchange.com/questions/257791
复制相似问题