db2中插入数据后直接返回主键(自增列id)的sql怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了db2中插入数据后直接返回主键(自增列id)的sql怎么写相关的知识,希望对你有一定的参考价值。
如题
参考技术A db2 => CREATE TABLE test_create_tab2 (db2 (cont.) => id INT NOT NULL PRIMARY KEY generated always as identity,
db2 (cont.) => val VARCHAR(10)
db2 (cont.) => );
DB20000I SQL 命令成功完成。
db2 => INSERT INTO test_create_tab2(val) VALUES ('NO id');
DB20000I SQL 命令成功完成。
这里和 SQL Server 一样,大家都不能手动指定那个 自增id 的数值
db2 => INSERT INTO test_create_tab2(id, val) VALUES (1, 'id no use');
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0798N 不能为定义为 GENERATED ALWAYS 的列 "ID" 指定值。 SQLSTATE=428C9
这里和 SQL Server 不一样,SQL Server 会自动排除掉那个自动递增的列
db2 => INSERT INTO test_create_tab2 VALUES ('Is Auto ?');
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0117N 赋值数目与指定的或隐含的列数或变量数不一样。 SQLSTATE=42802
关于 初始数值的设定。
db2 => drop TABLE test_create_tab2;
DB20000I SQL 命令成功完成。
db2 => CREATE TABLE test_create_tab2 (
db2 (cont.) => id INT NOT NULL PRIMARY KEY generated always as identity
db2 (cont.) => (Start With 100
db2 (cont.) => Increment by 1
db2 (cont.) => minvalue 100
db2 (cont.) => maxvalue 999999999
db2 (cont.) => no cycle cache 5 no order),
db2 (cont.) => val VARCHAR(10)
db2 (cont.) => );
DB20000I SQL 命令成功完成。
db2 => INSERT INTO test_create_tab2(val) VALUES ('NO id');
DB20000I SQL 命令成功完成。
db2 => select * from test_create_tab2;
ID VAL
----------- ----------
100 NO id
1 条记录已选择。
db2 => select identity_val_local() from SYSIBM.SYSDUMMY1;
1
---------------------------------
100.
1 条记录已选择。 参考技术B INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
--返回自增列
SELECT @@IDENTITY AS 'Identity'
DB2 如何主键自增
简单啊,用序列!不过序列不会自动填充,那么写个触发器,让插入数据的时候,想要自增的主键去获取序列并填充。自增列不好用,高并发容易出问题。 参考技术A 两个方案
1)sequence自增;
2)自增列 参考技术B 建议建SEQUENCE
以上是关于db2中插入数据后直接返回主键(自增列id)的sql怎么写的主要内容,如果未能解决你的问题,请参考以下文章