如何以下列方式将值插入表(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的顺序,原始表中新参考列的值将是自动递增的数字。所以我想按顺序插入它们。我希望这很清楚。
答案 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