当前位置: 首页 > news >正文

专业北京网站建设公司哪家好网站登录慢

专业北京网站建设公司哪家好,网站登录慢,凯里公司网站建设,上海网络推广软件db2设置主键自增 一、方式一#xff1a;IDENTITY设置主键自增1.1、语法一#xff1a;GENERATED BY DEFAULT AS IDENTITY1.1.1、使用1.1.2、注意事项或坑 1.2、语法二#xff1a;GENERATED ALWAYS AS IDENTITY 二、方式二#xff1a;Sequence(了解)2.1、insert时使用Sequenc… db2设置主键自增 一、方式一IDENTITY设置主键自增1.1、语法一GENERATED BY DEFAULT AS IDENTITY1.1.1、使用1.1.2、注意事项或坑 1.2、语法二GENERATED ALWAYS AS IDENTITY 二、方式二Sequence(了解)2.1、insert时使用Sequence2.2、查询下一个自增值2.3、查询上一个自增值或当前自增值2.4、查看Sequence信息 三、扩展3.1、修改列为自增长3.2、修改列自增长起始值3.3、修改SEQUENCE起始值3.4、修改SEQUENCE序列信息3.5、删除SEQUENCE 四、IDENTITY与Sequence的区别五、Sequence的原理 每种数据都有自己独特的自增列的声明方式如 Oracle 的 Sequence, SQL Server 的 Identity, MySQL 的 auto_increment, PostgreSQL 的 Sequence 或 Serial。和 PostgreSQL 类似DB2 也提供两种自增列的声明方式它们是 Sequence 和 Identity。而本文主要着墨于 DB2 的 Identity 字段并讲述它与 Sequence 的某种联系以及它对数据表的导入的影响。 一、方式一IDENTITY设置主键自增 说明IDENTITY的原理其实是一个匿名的Sequence底层被包装成了Sequence在处理。所以想要详细了解IDENTITY原理的人也可以看一下下面的Sequence内容。 identity更多内容参见官网 https://www.ibm.com/docs/en/db2/11.5?topicstatements-create-table#sdx-synid_identity-options DB2中有两种方式指定字段自增长 1.GENERATED BY DEFAULT AS IDENTITY --插入数据时允许指定自增字段的值只要不重复即可,数据库会自动设置下一个值2.GENERATED ALWAYS AS IDENTITY --不允许指定只能由数据库自动分配并插入相同点 1、即使插入语句失败标识列仍然自增(即插入失败也会自增一次)。 2、都可以重置起始值语句alter table [table_name] alter [col_name] restart with [x] 不同点 1、generated by default可以修改自增列的值,手工指定标识列的值。 2、generated always 不可修改自增列的值只能由系统生成。 1.1、语法一GENERATED BY DEFAULT AS IDENTITY CREATE TABLE t1(id INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) primary key,name VARCHAR(400),age INTEGER ); -- start with 1id从1开始 -- increment by 1 每次自增1参数简介如下 start with指定序列的起始值默认情况下对于升序的序列是当前指定数据类型的最小值对于降序序列的是当前指定类型的最大值。increment by指定增长的值默认值为1正数表示此序列为增长升序的负数表示此序列为降序的。minvalue最小值若降序序列no cycle的话到此值的时候就不再生成序列值了no minvalue对于升序序列来说此值为start with的值如果start with值未指定的话就是1. 对于降序序列来说此值就是指定数据类型的最小值。maxvalue指定生产序列的最大值no maxvalue对于升序序列来说此值为指定数据类型的最大值 对于降序序列来说此值为start with值若未指定start with值的话就是-1.cycle循环使用数据值对于升序序列来说当达到了最大值之后下一个值将会是其最小值 对于降序序列来说达到最小之后下一个序列值为其最大值。no cycle当达到序列的边界值之后就不再产生序列值默认选项。cache缓存序列值表示每次应用此序列的时候预先生产并存放在内存中的序列值。 其作用是有效的降低了写日志的I/O操作。 若在使用的过程中出现系统错误的话那么所有这些缓存值将会丢失。 最小值为2默认为20 no cache当指定此选项的时候内存中不会存储任何序列值无论出现什么异常现象都不会影响到此序列 每次生存新的序列值都会导致写日志的I/O操作。order按照请求的顺序生成值。no order不会按照请求的顺序生成值默认情况。 1.1.1、使用 用法一不指定id值让数据库自增 insert into t1 (name,age) values(张三,11); 用法二手动指定id值 insert into t1(id,name,age) values(2,李四,12)1.1.2、注意事项或坑 注意若手动指定自增id值当id自增到该值时会报主键重复 案例描述 以上述示例为参考先插入一条数据id自增为1然后手动插入一条数据指定id为2 此时再插入一条数据不手动指定id使用数据库自增此时会报主键重复 问题分析 猜测自增的id,数据库内存中会存储当前最大值。 手动插入的不会维护在内存中导致继续按内存中的最大值进行自增所以会有主键冲突问题。 案例示例 CREATE TABLE t1(id INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),name VARCHAR(400),age INTEGER,PRIMARY KEY (id) );insert into t1 (name,age) values(张三,11); insert into t1(id,name,age) values(2,李四,12); insert into t1 (name,age) values(王五,13);select * from t1;报错内容 [23505][-803] One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by 1 constrains table TEST.T1 from having duplicate values for the index key.. SQLCODE-803, SQLSTATE23505, DRIVER4.23.42解决方法 方法一设置t1表id从指定值之后开始自增 ALTER TABLE t1 ALTER COLUMN id RESTART WITH 18;方法二重新执行一下插入语句即可。 原理第一次插入失败后自增值也会自增1所以再执行一次就跳过那个重复值了。1.2、语法二GENERATED ALWAYS AS IDENTITY CREATE TABLE t2(id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),name VARCHAR(400),age INTEGER,PRIMARY KEY (id) ); -- start with 1id从1开始 -- increment by 1 每次自增1使用示例 注意insert语句中不能包含id字段否则就报错。id只能由数据库自增 insert into t2 (name,age) values(张三,11);加了id后就会报以下错误 二、方式二Sequence(了解) IBM 官方的相关文档 CREATE SEQUENCE statement Sequence的方式比Identity要稍微麻烦一些所以可以作为了解主要还是使用IDENTITY。 IDENTITY的原理其实是一个匿名的Sequence底层被包装成了Sequence在处理。 在 DB2 中声明一个 Sequence 与表的 Identity 字段的参数差不多我们可以看作 Identity 是一个内联的 Sequence。先来看如何创建一个序列 语法CREATE SEQUENCE sequence-nameAS data-type 默认 As IntegerSTART WITH numeric-constant INCREMENT BY numeric-constant 默认 INCREMENT BY 1MINVALUE numeric-constant | NO MINVALUE 默认 NO MINVALUEMAXVALUE numeric-constant | NO MAXVALUE 默认 NO MAXVALUENO CYCLE | CYCLE 默认 NO CYCLECACHE numeric-constant | NO CACHE 默认 CACHE 20NO ORDER | ORDER 默认 NO ORDER示例 CREATE SEQUENCE ORDER_SEQAS data-type BIGINTSTART WITH 1 INCREMENT BY 1 CACHE 24;参数简介如下 as datatype指定数据类型这里说明下序列的数据类型只能为数值型 如smallintintegerbigint不带小数点的decimal类型。 2.1、insert时使用Sequence insert into t1(id,name,age) values(NEXT VALUE for ORDER_SEQ,scott,30);使用的话比如 insert, update 记录时用它的 NEXT VALUE FOR ORDER_SEQ 值我们也可以查询到它的下一个值 SELECT NEXT VALUE FOR ORDER_SEQ FROM SYSIBM.SYSDUMMY1;注意每调用一次next value 就会使用掉一个自增id值 2.2、查询下一个自增值 NEXTVAL FOR 序列 或 NEXT VALUE FOR 序列 或 select 序列名.nextval from SYSIBM.SYSDUMMY1;示例 SELECT NEXTVAL FOR ORDER_SEQ FROM SYSIBM.SYSDUMMY1; SELECT NEXT VALUE FOR ORDER_SEQ FROM SYSIBM.SYSDUMMY1; select ORDER_SEQ.nextval from SYSIBM.SYSDUMMY1;2.3、查询上一个自增值或当前自增值 SELECT PREVIOUS VALUE FOR ORDER_SEQ FROM SYSIBM.SYSDUMMY1;2.4、查看Sequence信息 SELECT * FROM sysibm.syssequences三、扩展 3.1、修改列为自增长 当想将表中一列修改为自动增长时可用下面命令 语法 alter table table name alter column column name set generated always as identity (start with 1,increment by 1);示例设置user表id字段为自增长 alter table user alter column id set generated always as identity (start with 1,increment by 1);3.2、修改列自增长起始值 当修改表中一列自动增长的开始值时可用下面的命令 语法 ALTER TABLE talbe_name ALTER COLUMN column name RESTART WITH 起始值;示例设置user表id字段从18开始自增 ALTER TABLE user ALTER COLUMN id RESTART WITH 18;3.3、修改SEQUENCE起始值 ALTER SEQUENCE 序列名 RESTART WITH 下一值示例 alter sequence order_seq restart with 10;3.4、修改SEQUENCE序列信息 修改最大值 ALTER SEQUENCE sequence_name MAX VALUE numeric-constant | NO MAXVALUE 修改最小值 ALTER SEQUENCE sequence_name MIN VALUE numeric-constant | NO MINVALUE 此值需要比当前值小 修改步长 ALTER SEQUENCE sequence_name INCREMENT BY numeric-constant; 修改CACHE值 ALTER SEQUENCE sequence_name CACHE numeric-constant | NO CACHE 修改循环属性: ALTER SEQUENCE sequence_name CYCLE | NO CYCLE 修改排序属性 ALTER SEQUENCE sequence_name ORDER | NO ORDER 从新计数 ALTER SEQUENCE sequence_name RESTART | RESTART WITH numeric-constant注意 1、序列的数据类型不能修改若要修改只能删除当前序列重建时指定想要的数据类型。 2、当修改的时候所有的缓存值将会丢失。 3、当将序列修改为cycle之后序列将会产生重复的值。 3.5、删除SEQUENCE DROP SEQUENCE sequence_name;四、IDENTITY与Sequence的区别 Identity字段与sequence的最大不同在于 identity只能在一个表中使用多个表不可以共享identity;而sequence可以通过命名方式在同一个数据库内部的多个表中共享序列号发生器 五、Sequence的原理 待补充可见参考文章 参考文章 https://blog.csdn.net/davidmeng10/article/details/46362997 https://blog.itpub.net/13165828/viewspace-609640/
http://www.zqtcl.cn/news/71965/

相关文章:

  • 推广赚钱的软件win7系统优化大师
  • 网站500错误是什么意思凯里seo排名优化
  • 常州网站推广公司伊春网站开发
  • 网站程序怎么上传东莞凤岗房价
  • 免费网站建设免代码网站icp备案号查询
  • 做湲兔费网站视颍新开传奇网站超变
  • asp.net 开发的网站html网页制作流程
  • 多个域名指定同一个网站好处淮南市网站建设
  • 网页设计与网站开发试题答案wordpress添加搜索小工具
  • 吉浦网站建设网站侧面的虚浮代码
  • wordpress 选项卡插件seo如何快速出排名
  • 中牟网站建设关键字挖掘机爱站网
  • 宁波网站建设医院网站开发兼职
  • 网站速度对seo的影响app成本
  • 苏州外贸网站建设运营深圳seo外包
  • 珠海专业做网站的公司静安建设网站
  • 网页升级访问永久你懂的南宁seo企业优化
  • 温州营销网站公司哪家好知名企业网站人才招聘情况如何
  • 钓鱼网站下载网站开发需要多少人
  • 响应式 网站建设网站制作的建设大纲ppt
  • 中小企业网站建设大众点评网
  • 无锡网站建设 无锡和诚科技wordpress 优惠主机
  • 图书网站开发数据库的建立领导视察网站建设
  • 建设公司网站入账河南城乡建设部网站
  • 东营网站建设推广哪家好中国企业网信息查询
  • 贵阳做网站好的公司销售系统
  • 自助建站和wordpress海南科技网络有限公司
  • 网站后端做留言板功能做东西的网站有那些
  • 建设部网站已经公布黑名单项目分享网
  • 江苏网站建设基本流程wordpress云服务器安装教程