用增量数字填充字段需要啥 MySQL 语句

Posted

技术标签:

【中文标题】用增量数字填充字段需要啥 MySQL 语句【英文标题】:What MySQL statement needed to populate a field with incremental number用增量数字填充字段需要什么 MySQL 语句 【发布时间】:2012-12-24 18:03:45 【问题描述】:

我有一个旧的 MS Access 数据库,我正在将其转换为 mysql 数据库。我使用 Bullzip 创建数据库,但由于设计不佳,旧的 MS Access 数据库对于大多数表都没有唯一的主键。

所以我创建了一个 id 字段,但显然每个条目都是空的,我想知道是否有一个简单的语句可以用 1、2、3、4 等填充它们...

编辑: 我想我没有正确地回答我的问题。我对自动增量一无所知。那不是问题。

我有一张表,里面装满了我需要保留的记录,这些记录来自一个没有将唯一 ID 定义为字段的 Access 数据库。换句话说,我有名字、姓氏等字段,但没有“id”字段。这看起来绝对是疯狂的,但显然这个数据库已经被很好地使用了,并且从来没有任何表的唯一 ID。奇怪!

无论如何,我已经在表中为 id 创建了一个字段(当然并将其设置为自动递增),但显然所有现有记录目前都没有设置 id。所以我需要为每条记录创建一个。

有没有办法使用 mysql 语句用唯一的数字填充所有这些记录?

干杯

【问题讨论】:

检查我的更新解决方案并告诉我。 【参考方案1】:

如果您将新的 id 列添加到现有表并使其成为 AUTO_INCREMENT PRIMARY KEY,它将自动使用递增值填充它。

mysql> ALTER TABLE TheTable ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY;
mysql> SELECT id FROM TheTable;
-- outputs values 1, 2, 3, etc.

如果您创建了一个 id 列但没有将其声明为 AUTO_INCREMENT PRIMARY KEY,您可以像这样填充该列:

mysql> SET @id := 0;
mysql> UPDATE TheTable SET id = (@id := @id+1);

【讨论】:

你太棒了!谢谢您的帮助!工作一种享受【参考方案2】:

使用预定义的 AUTO_INCREMENT 字段,并在插入新记录时将值设置为 NULL,以便它自动构建适当的增量器。除此之外,没有办法(除非使用过程)来创建一组递增的值

【讨论】:

【参考方案3】:

使用 MySQL 的 auto_increment 特性。 MySQL 将为您的 id 列生成唯一编号。

有关 auto_increment 功能的说明,请参阅http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

【讨论】:

【参考方案4】:

如果你只想要一个唯一的标识符,你可以使用uuid() 函数。它比整数占用更多空间,但它可以满足您的需求。

但是,我同意您应该添加自动增量列并重新填充表格的其他答案。这是保持 id 在一段时间内唯一的最简单方法,即使在发生更新时也是如此,并使用更合理的存储量。

【讨论】:

【参考方案5】:

我不精通 MySQL,但我在其他 DBMS 中也遇到过同样的问题,下面是我在使用 AutoIncrement 类型工具时如何解决它,但 DBMS 无法自动追溯应用它:

    重命名要添加 ID 字段的表。所以将 Table1 重命名为 Table1_Old。 创建一个新的 Table1,它是 Table1_Old 的副本,但其中没有数据。 将您的 ID/AutoIncrement 列添加到 Table1 现在将所有数据从 Table1_Old 复制到 Table1,跳过或为 ID 列指定 NULL。 (这通常是一个 INSERT..SELECT.. 命令) 删除 Table1_Old。

实际细节和命令因 DBMS 而异,但我通常能够找到一种方法来执行这些步骤。

【讨论】:

【参考方案6】:

使用AUTO_INCREMENT

CREATE TABLE insect
    (
     id INT UNSIGNED NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (id),
    name VARCHAR(30) NOT NULL,
    date DATE NOT NULL,
    origin VARCHAR(30) NOT NULL
    );

更新

我相信,除非你不会创建新表,否则这似乎是一项艰巨的任务,我会建议你使用这个

SET @rank=0;
SELECT @rank:=@rank+1 AS rank, itemID FROM orders;

它将为您创建一个名为rank 的虚拟列,它具有唯一的 id 值。

【讨论】:

以上是关于用增量数字填充字段需要啥 MySQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

Mysql - 增量脚本中修改字段属性

小白学习MySQL - 增量统计SQL的需求

小白学习MySQL - 增量统计SQL的需求

MySQL 数据库增量数据恢复案例

MySQL 后端和访问 (.accdb, 2013) 前端自动增量问题

MySQL 之数据库增量数据恢复案例