You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为SQL表每行分配ID整数值并设置主键

解决方案

方法一:为已存在的ID列填充递增值并设为主键

针对你已经添加了空ID列的情况,可按不同数据库类型执行以下操作:

MySQL/MariaDB

  1. 为ID列填充递增数值:
SET @row_number = 0;
UPDATE 你的表名
SET ID = (@row_number := @row_number + 1);
  1. 修改ID列属性,设为主键并开启自增(方便后续插入数据):
ALTER TABLE 你的表名
MODIFY COLUMN ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

SQL Server

  1. 用窗口函数更新ID值:
WITH CTE AS (
    SELECT ID, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM 你的表名
)
UPDATE CTE
SET ID = rn;
  1. 设置ID列为主键:
ALTER TABLE 你的表名
ALTER COLUMN ID INT NOT NULL;

ALTER TABLE 你的表名
ADD CONSTRAINT PK_你的表名_ID PRIMARY KEY (ID);

若需要后续插入自动递增,可修改列属性:

ALTER TABLE 你的表名
ALTER COLUMN ID INT IDENTITY(1,1);

PostgreSQL

  1. 填充ID递增值:
UPDATE 你的表名
SET ID = row_number() OVER (ORDER BY (SELECT NULL))
WHERE ID IS NULL;
  1. 设置为主键并配置自增序列(可选):
ALTER TABLE 你的表名
ALTER COLUMN ID SET NOT NULL;

ALTER TABLE 你的表名
ADD PRIMARY KEY (ID);

-- 关联自增序列,支持后续插入自动赋值
CREATE SEQUENCE 你的表名_id_seq OWNED BY 你的表名.ID;
SELECT setval('你的表名_id_seq', (SELECT MAX(ID) FROM 你的表名));
ALTER TABLE 你的表名 ALTER COLUMN ID SET DEFAULT nextval('你的表名_id_seq');

方法二:更简便的一步式操作(未创建ID列时适用)

如果还没添加ID列,可直接新增带自增属性的主键列,数据库会自动为现有行分配1、2、3...的递增值:

MySQL/MariaDB

ALTER TABLE 你的表名
ADD COLUMN ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

SQL Server

ALTER TABLE 你的表名
ADD ID INT IDENTITY(1,1) PRIMARY KEY;

PostgreSQL

ALTER TABLE 你的表名
ADD COLUMN ID SERIAL PRIMARY KEY;

内容的提问来源于stack exchange,提问作者Declan Davies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:43:12