You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Db2临时表能否设置主键?其他DBMS可行但Db2报错求助

在Db2 LUW 12中为临时表设置主键的方案

Db2里的临时表分两种类型,你之前用CREATE TEMPORARY TABLE创建的是系统临时表——这类表仅用于存储查询中间结果,不支持主键、索引这类约束,这就是触发SQLCODE=-526报错的核心原因。

要创建带主键的临时表,你需要使用用户临时表,语法为DECLARE GLOBAL TEMPORARY TABLE。这类表属于会话级对象,支持主键、索引等约束,且你已经创建了用户临时表空间,完全满足使用条件。

具体实现语句

DECLARE GLOBAL TEMPORARY TABLE SESSION.test(
    id INT NOT NULL PRIMARY KEY,
    data VARCHAR(255)
) ON COMMIT PRESERVE ROWS;

关键细节说明

  • SESSION.是必填前缀,用来标识这是会话级的用户临时表
  • ON COMMIT PRESERVE ROWS:控制事务提交时是否保留表中数据,默认行为是ON COMMIT DELETE ROWS,可根据业务需求调整
  • 用户临时表仅在当前会话有效,会话结束后会自动销毁,无需手动删除
  • 你之前创建的temp_tablespace会被Db2自动用于存储用户临时表;若存在多个用户临时表空间,可通过IN temp_tablespace子句指定目标空间

额外补充

如果后续需要给该临时表添加索引,也可以正常执行CREATE INDEX语句,示例如下:

CREATE INDEX idx_test_data ON SESSION.test(data);

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

火山引擎 最新活动