Skip to content

Java知识体系

StarRocks PRIMARY KEY 列无法直接 UPDATE

StarRocks Primary Key 模型中,主键列是行的唯一标识,引擎不允许直接 UPDATE 主键列,执行会报错:

SQL Error [1064] [42000]: primary key column cannot be updated: <列名>

方案一:DELETE + INSERT(推荐)

先用 SELECT 查出目标行、修改主键列的值后重新 INSERT,StarRocks 会按主键做 upsert 覆盖;再 DELETE 掉旧值的行。

sql
-- 1. 插入修改后的新行(upsert 覆盖)
INSERT INTO <表名>
SELECT
    <非主键列1>,
    <非主键列2>,
    '新值' AS <主键列>,   -- 只改这一列
    <其他列...>
FROM <表名>
WHERE <主键列> = '旧值';

-- 2. 删除旧值的行
DELETE FROM <表名>
WHERE <主键列> = '旧值';

注意:两步之间短暂存在新旧数据并存,有并发读场景需评估影响。数据量大时可按分区分批执行,或改用 INSERT OVERWRITE PARTITION 整分区重写。