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




