按顺序插入表格

时间:2012-02-23 14:24:10

标签: mysql sql

如何以下列方式将值插入表(MySQL):
在表的所有行中,按ID列(PK)的顺序,在列'num'中插入递增的数字?
例如,如果表有3行,Ids为1,5,2,我希望ID 1得到num = 1,ID 2得到num = 2,ID 5得到num = 3.

修改 我会解释为什么我(我想)需要这个:
我试图将一个表从一个表拆分为一个具有1对1关系的单独表。我以为我会按照ID的顺序获取所有值,并将它们插入到新表中,并使用自动递增PK。然后我知道,按照ID的顺序,原始表中新参考列的值将是自动递增的数字。所以我想按顺序插入它们。我希望这很清楚。

4 个答案:

答案 0 :(得分:4)

我目前不在sql数据库引擎的前面,因此无法提交完全验证的sql代码。但是如果你的num字段不是一个自动增量字段而不是像这样:

CREATE TEMPORARY TABLE temp_table_x (
    num int auto_increment primary key,
    reference_id int
);

INSERT temp_table_x (reference_id)
SELECT id FROM source_table ORDER BY id;

UPDATE source_table st 
    SET st.num = x.num
FROM temp_table_x x
WHERE reference_id = id;

答案 1 :(得分:3)

只要num字段是自动增量字段,它就应该如下所示:

INSERT INTO
  yourTable (
    field1,
    field2,
    field3,
    etc
  )
SELECT
  field1,
  field2,
  field3
FROM
  yourSourceTable
ORDER BY
  originalIdField

答案 2 :(得分:1)

我不会创建一个字段来引用另一个表中的列自动增量列。

即使它引用的列是自动递增,我也不会使列自动递增。要使列保持同步很困难。如果插入在一个表中但不在另一个表中回滚,则在重置auto_increment值之前,您将不同步。

如果是1比1的关系,请随意将列作为主键。这样它将按列排序,它将确保唯一值。但是,如果任何两列必须匹配,它们不应该都是自动递增的,但它们应该是相同的类型(例如.INTEGER)。

例如,这是我们的原始表,其中第一列是自动增量整数列:

id  customer_name  email_address
---------------------------
1   jsmith         jsmith@aol.com
2   bwilliams      bwilliams@aol.com

如果您想将email_address拆分为自己的表,则采用1比1的关系:

id  email_address
---------------------------
1   jsmith@aol.com
2   bwilliams@aol.com

我会将第一列作为整数字段并使其成为主键,但它不会是自动增量列。

要将值插入此类表中,您只需执行以下操作:

INSERT INTO table2
  (id, email_address)
SELECT id, email_address
  FROM table1
  ORDER BY id

答案 3 :(得分:-1)

我找到了答案。这很简单:

SET @c=0;
UPDATE myTable SET num = (@c:=@c+1) ORDER BY id