DB2 autoincretment(抄袭)
自动生成列:
1.在创建表的时候通过generated字句指定;
2.支持两个选项,generated always和generated by default.
1)generated always:DB2控制值的生成,如果指定了值,将会报错;
2)generated by default:如果指定了值,DB2将不会帮你生成值,因此不能保证数据的
唯一性;
举例:
create table payroll
(employee_id int not null,
base_salary double,
bonus double,
commission double,
total_pay double generated always as
(base_salary *(1 + bonus) + commission)
下面的两条语句,将产生相同的结果:
insert into payroll values(1,100,0.1,20,DEFAULT); -- DEFAULT是DB2的保留字
insert into payroll (employee_id,base_salry,bonus,commission)
values(1,100,0.1,20);
如何使用identity列和sequence对象:
作用:
用于生成雇员编号、订单号、票号码等,它的优点是能保证唯一性,比通过应用程序去实现速度要快。identity列和sequence对象具有下列属性:
start with 第一个值
increment by 每次增加的值,缺省是1,通过它控制降序和升序
minvalue /no minvalue 控制是否有最小值
maxvalue/no maxvalue 控制是否有最大值
cycle/nocycle 是否循环使用
cache/no cache/cache 20 是否缓存值,缺省是20个值;但DB2重启之后会丢失值,造成数值不连续;
create table service_rq
( rqid smallint not null constraint rqid_pk primary key,
accum_rqnum integer not null
generated always as identity
( start with 1
,increment by 1
,cache 10)
5)通过函数identity_val_local可以检索出上一个语句生成的identity列
的值
select identity_val_local() into p_accum_rqnum from sysibm.sysdummy1;
values identity_val_local() into p_accum_rqnum;
6)如果在一个insert语句中插入多条记录,identity_val_local将返回空值
insert into service_rq(rqid,accum_rqnum) values(30000,DEFAULT),(30001,DEFAULT);
7)identity列的属性可以通过alter table来修改,其中restart with语句最常用;
2.sequence
1)sequence也用于自动生成值,它和identity列的区别是不绑定到特定的表,是全局的,
单独创建的对象,可以用于任何一个表。
2)创建
create sequence staff_seq as integer
start with 360
increment by 10
no maxvalue
no cycle
cache 10
3)修改属性
通过alter sequence可以修改下列属性:
restart with minvalue /no minvalue maxvalue/no maxvalue cycle/ no cycle
increment by cache <integer constant>/ no cache
4)删除sequence
drop sequence <sequence-name>
5)使用sequence对象需要的权限
grant usage on sequence < sequence object name> to public
6.检索生成的值
通过两个表达式来实现:
next value – 下一个值;
previous value – 当前的值;
create procedure seqexp ( out p_prevval1 int,
out p_nextval1 int,
out p_nextval2 int,
out p_prevval2 int )
language sql
specific seqexp
begin
declare v_prevstaffno int;
insert into staff (id,name,dept,job,year,salary,comm)
values (next value for staff_seq,’bush’,55,’mgr’,30,null,null);
update staff set id =( next value for staff_seq ) where name=‘bush’;
values previous value for staff_seq into v_prevstaffno;
delete from staff where id = v_prevstaffno;
values ( previous value fro staff_seq -- (1)
,next value for staff_seq
,next value for staff_seq
,previous value fro staff_seq )
into p_prevval1,p_nextval1,p_nextval2,p_prevval2;
end
需要注意的是:在行1中,如果在一个语句中多次引用同一个sequence对象,next value和previous value将只执行一次;假设staff_seq最后生成的值为500,那么行1中返回值分别为500、510、510、500。
DB2 autoincretment(抄袭)的更多相关文章
- DB2数据类型(抄袭)
数字 数据类型 精度 最小值 最大值 smal ...
- DB2重启数据库实例
DB2重启数据库实例时,有时停止实例会失败,此时需要先确认没有应用链接数据库,然后再关闭数据库实例,并重新启动. 1.查看是否有活动的链接 命令:db2 list applications for d ...
- 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗
ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性: Oracle.MYSQL与DB2可在所有主流平台上运行: SQL Server只能在Windows下运行: --安 ...
- C# 连接DB2字符串 Oracle免安装客户端连接字符串
以下是DB2连接数据库 1)使用IBM.Data.DB2链接DB2数据库 2)必须安装DB2客户端,IBM.Data.DB2在安装的BIN里可以找到 3)注意一下DB2客户端版本问题,我的就是WIN7 ...
- DB2错误码信息
00 完全成功完成 表 3 01 警告 表 4 02 无数据 表 5 07 动态 SQL 错误 表 6 08 连接异常 表 7 09 触发操作异常 表 8 0A 功能部件不受支持 表 9 ...
- DB2数据库参数建议(AIX)
修改用户最大进程数: chdev -l sys0 -a maxuproc=' 用户资源配置:对实例用户,fence用户,应用用户添加如下限制: db2inst1 : fsize=- fsize_har ...
- db2定界符
在DB2数据库中,在导出DEL文件时,默认的字符分隔符是".字段分隔符是, (逗号).有一个需求是要为Oracle数据库提供数据,因此就想使用"|"作为数据的字段分隔符. ...
- db2基础
DB2知识文档 一.db2 基础 基本语法 注释:"--"(两个减号) 字符串连接:"||" 如set msg='aaaa'||'bbbb',则msg为'aaa ...
- db2 日期时间格式
db2日期和时间常用汇总 1.db2可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值. SELECT 'HELLO DB2 ...
随机推荐
- UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 263: i llegal multibyte sequence
UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 263: illegal multibyte seq ...
- C# EF 基础操作
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Jsch - java SFTP 文件上传下载
使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...
- SpringMvc 文件上传后台处理
springMVC后台参数是通过MultipartFile类来转化Request的文件上传,但需要apache下fileupload的jar包做支持. 在springMVC的dispatcher-co ...
- Egret - timer
相关:http://edn.egret.com/cn/index.php/article/index/id/154 1.Timer 的使用方法非常简单,我们只需要关心两个属性,三个方法和两个事件即可. ...
- VirtualBox“切换到无缝模式”和“自动调整显示尺寸”菜单无法使用
现象:VirtualBox“切换到无缝模式”和“自动调整显示尺寸”菜单无法使能,无法全窗口显示虚拟机桌面,菜单状态如下图所示: 原因:该功能的支持需要安装VirtualBox增强功能 方法:安装Vir ...
- spring 整合 struts2 xml配置
整合之前要搞清楚struts2是什么; struts2:表现层框架 增删改查 作用域 页面跳转 异常处理 ajax 上传下载 excel 调用service spring :IOC/ ...
- MySQL中实现Oracle里面 rank()over ( PARTITION BY ORDER BY) 分类分组功能
各班级学生成绩测试表 select * from TMP_A; 实现目的: 按照班级分类后按照分数倒序排序 采用MySQL变量简单实现,SQL如下: SELECT a.stu_id,a.point, ...
- Python基础语法题库
引言: 语法练习包括Python基础语法.数据类型.字符编码和简单文件操作等内容. 正文(参考答案附录在题目下方): 1.Python 里用来告知解释器跳过当前循环中的剩余语句,然后继续进行下一轮循环 ...
- Java http请求和调用(二)
http请求代码 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader ...