- 论坛徽章:
- 0
|
DB2下有自增列这个功能吗??
如何创建能自动加一的字段?
环境 产品: DB2/400
平台: AS/400
版本: R510
问题 如何创建能自动加一的字段?
解答 到目前为止,DB2 UDB for iSeries还没有支持字段自动加一的内部命令。从OS/400
V5R1M0开始支持的SQL存储过程使得实现这一功能变得简单易行。
1. 创建一个包含默认值为0的整数字段的表:
CREATE TABLE COLLECTION.TABLE (NUMBER_FIELD INTEGER NOT NULL WITH DEFAULT 0, ... )
2. 表建立完成后,立即创建一个触发器程序:
CREATE TRIGGER AUTO_NUMBER
AFTER INSERT ON COLLECTION.TABLE
FOR EACH ROW MODE DB2SQL
BEGIN
DECLARE MAXNUM INT;
SET MAXNUM = (SELECT MAX(NUMBER_FIELD) FROM COLLECTION.TABLE);
SET MAXNUM = MAXNUM + 1;
UPDATE COLLECTION.TABLE SET NUMBER_FIELD = MAXNUM
WHERE NUMBER_FIELD = 0;
END
3. 建议在该表上建立唯一索引,以保证该整数字段没有被插入重复的值:
CREATE UNIQUE INDEX COLLECTION.INDEX ON COLLECTION.TABLE (NUMBER_FIELD)
WITH 1 DISTINCT VALUES
4. 如果想在一个已经存在的表中增加该功能,则需要在表中增加一个字段,并且手工将已存在的
记录进行自动加一的工作, 那么在这之后插入的记录就能够按照触发器自动加一:
ALTER TABLE COLLECTION.TABLE ADD COLUMN NUMBER_FIELD INTEGER NOT NULL WITH DEFAULT 0
5. 由于该触发器总会搜索表中最大的值,因此如果设定被删除的记录所占用的空间可以被重新
利用,那么该记录对应的数值将不被重新计算。
6. 由于该表定义的是整数类型的字段, 因此最大数值为: 2147483647,如果您需要更大的数,那么
可以将该字段该为BIGINT类型, 这样就可以达到 9223372036854775807 :
ALTER TABLE COLLECTION.TABLE ALTER COLUMN NUMBER_FIELD SET DATA TYPE BIGINT
NOT NULL WITH DEFAULT 0 |
|