Oracle数据库插入自增ID:如何生成起始为1的递增主键
如何为table1生成从1开始的递增id值?
嘿,这个问题得看你使用的数据库类型,不过主流数据库都有对应的方案来生成从1开始的连续递增序号,我给你分常用情况拆解:
通用方案(适用于MySQL、PostgreSQL、SQL Server等多数现代数据库)
你可以用ROW_NUMBER()窗口函数,它能给查询结果的每一行分配一个从1开始的连续序号,完美匹配你的需求。所以[*]处直接填ROW_NUMBER() OVER ()就行。
完整的插入语句长这样:
INSERT INTO table1 (id, value1, value2, ...) SELECT ROW_NUMBER() OVER (), value1, value2, ... FROM table2;
如果你需要按照table2里的某列顺序来生成id(比如按创建时间排序),可以在OVER()里加ORDER BY来指定规则,比如:
INSERT INTO table1 (id, value1, value2, ...) SELECT ROW_NUMBER() OVER (ORDER BY table2.create_time DESC), value1, value2, ... FROM table2;
更省心的替代方案(如果id是自增主键)
如果你的table1的id字段已经设置为自增类型(比如MySQL的AUTO_INCREMENT、SQL Server的IDENTITY、PostgreSQL的SERIAL/GENERATED AS IDENTITY),那其实根本不用手动生成id!直接省略id列的插入,数据库会自动帮你生成从1开始的递增主键,语句更简洁:
INSERT INTO table1 (value1, value2, ...) SELECT value1, value2, ... FROM table2;
这种方式还能避免手动生成序号可能出现的主键冲突问题,推荐优先考虑。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

