【问题标题】:MYSQL - How to avoid primary id wastages?MYSQL - 如何避免主 ID 浪费?
【发布时间】:2012-06-14 12:00:04
【问题描述】:

如何避免通过多个load语句插入记录时跳过primary id?

我通过 LOAD 语句将一个包含 150 条记录的文件插入到一个表中。

插入后表中最后一个primary id是150。

现在,当我通过 load 语句插入另一个包含 100 条记录的文件时,分配给第一条记录的主 ID 是 251 而不是 151。

如何避免这些主要 id 浪费?

更多信息: 例如:

mysql> desc test_data;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255)     | NO   | UNI | NULL    |                |
| image      | varchar(255)     | NO   |     | NULL    |                |
| created_at | datetime         | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

我的加载语句 -

 LOAD DATA LOCAL INFILE '~/test_2.dat' 
       INTO TABLE test_data 
       FIELDS TERMINATED BY '|' 
       LINES TERMINATED BY '\n' 
       set created_at=CURRENT_TIMESTAMP;

文件test_2.dat中的样本数据:

|Peter|peter.jpg
|sam|sam.jpg
|radnor|radnor.jpg
|bruce|bruce.jpg

这是加载该文件后的表结构。

mysql> show create table test_data;

| test_data | CREATE TABLE `test_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `image` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 |

现在,此表中的 max(id) 为 4。但为什么 AUTO_INCREMENT 值现在设置为“8”?不应该设置为“5”吗?

【问题讨论】:

  • 您能否详细说明一下。
  • 我的朋友,你把自己弄复杂了,你不使用自动增量吗?

标签: mysql load auto-increment


【解决方案1】:

您可以在主 ID 上将 AUTO_INCREMENT 标记为 true 以在加载期间跳过它们。 更多信息有助于更好地回答。

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 2021-09-17
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多