用增量数字填充字段需要啥 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 语句的主要内容,如果未能解决你的问题,请参考以下文章