KingbaseES 自增列三种方式
KingbaseES中3种自增长类型sequence,serial,identity的区别:
对象 |
显示插入 |
显示插入后更新最大值 |
清空表后是否重置 |
是否跟事务一起回滚 |
多对象共享 |
支持重置 |
出现错误后序列值是否增长 |
sequence |
是 |
否 |
否 |
否 |
是 |
是 |
是 |
serial |
是 |
否 |
否 |
否 |
否 |
是 |
是 |
identity |
是 |
否 |
否 |
否 |
否 |
是 |
是 |
1、Sequence
create sequence seq_1 INCREMENT BY 1 MINVALUE 1 START WITH 1;
create table test_seq
(
id int not null default nextval('seq_1') primary key,
name varchar(10)
); 隐式插入
insert into test_seq (name) values ('aaa');
insert into test_seq (name) values ('bbb');
insert into test_seq (name) values ('ccc');
显式插入
insert into test_seq (id,name) values (5,'ddd');
再次隐式插入
test1=# insert into test_seq (name) values ('eee');
INSERT 0 1
test1=# insert into test_seq (name) values ('fff');
错误: 重复键违反唯一约束"test_seq_pkey"
描述: 键值"(id)=(5)" 已经存在
再次执行语句可正常插入,序列因为之前的错误调用自动增加
test1=# insert into test_seq (name) values ('fff');
INSERT 0 1
重置序列
--重置序列的最大值
select setval('seq_1',(select max(id) from test_seq)::BIGINT); --事务回滚后,序列号并不会回滚
test1=# begin;
BEGIN
test1=# insert into test_seq (name) values ('ggg');
INSERT 0 1
test1=# rollback;
ROLLBACK -- truncate 表之后,序列不受影响
test1=# truncate table test_seq;
TRUNCATE TABLE
test1=# insert into test_seq (name) values ('ggg');
INSERT 0 1
test1=# select * from test_seq;
id | name
----+------
9 | ggg
(1 行记录) --重置序列
ALTER SEQUENCE seq_1 RESTART WITH 1;
test1=# ALTER SEQUENCE seq_1 RESTART WITH 1;
ALTER SEQUENCE
test1=# insert into test_seq (name) values ('ggg');
INSERT 0 1
test1=# select * from test_seq;
id | name
----+------
9 | ggg
1 | ggg
2、Serial
create table test_serial
(
id serial primary key,
name varchar(100)
);
隐式插入
insert into test_serial(name) values ('aaa');
insert into test_serial(name) values ('bbb');
insert into test_serial(name) values ('ccc');
显示插入
insert into test_serial(id,name) values (5,'ddd);
select * from test_serial; --再次隐式插入,第二次会报错
test1=# insert into test_serial(id,name) values (5,'ddd);
INSERT 0 1
test1=# insert into test_serial(name) values ('eee');
INSERT 0 1
test1=# insert into test_serial(name) values ('fff');
错误: 重复键违反唯一约束"test_serial_pkey"
描述: 键值"(id)=(5)" 已经存在 --再次执行语句可正常插入,序列因为之前的错误调用自动增加
test1=# insert into test_serial(name) values ('fff');
INSERT 0 1 --重置serial
SELECT SETVAL((SELECT sys_get_serial_sequence(' test_serial', 'id')), 1, false);
3、Identity
Identity是R6版本新增的语法,R3数据库不支持该语法。
identity定义成generated by default as identity允许显式插入,
identity定义成always as identity 不允许显示插入,但是加上overriding system value也可以显式插入。
create table test_identiy_1
(
id int generated always as identity (START WITH 1 INCREMENT BY 1) primary key ,
name varchar(100)
);
insert into test_identiy_1(name) values ('aaa');
insert into test_identiy_1(name) values ('bbb');
insert into test_identiy_1(name) values ('ccc'); --显式插入值
如果定义为generated always as identity则不允许显式插入,除非增加overriding system value 提示。
test1=# insert into test_identiy_1(id,name) values (5,'ccc');
错误: 无法插入到列"id"
描述: 列"id"是定义为GENERATED ALWAYS的标识列.
提示: 使用OVERRIDING SYSTEM VALUE覆盖.
test1=# insert into test_identiy_1(id,name)overriding system value values (5,'ccc');
INSERT 0 1
generate by default:
create table test_identiy_2
(
id int generated by default as identity (START WITH 1 INCREMENT BY 1) primary key ,
name varchar(100)
); insert into test_identiy_2(name) values ('aaa');
insert into test_identiy_2(name) values ('bbb');
insert into test_identiy_2(name) values ('ccc'); test1=# insert into test_identiy_2(id,name) values (5,'ccc');
INSERT 0 1
重置 Identity
重置Identity的方式有2种:
1. ALTER TABLE test_identiy_1 ALTER COLUMN id RESTART WITH 100;
2. TRUNCATE table test_identiy_1 RESTART IDENTITY;
KingbaseES 自增列三种方式的更多相关文章
- Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查
前言 java连接数据库完整流程为: 1,获得驱动(driver),数据库连接(url),用户名(username),密码(password)基本信息的三种方式. 2,通过获得的信息完成JDBC实现连 ...
- Oracle字符串行拆分成列的三种方式
Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...
- 仿联想商城laravel实战---5、无刷新的增删改查(动态页面更新的三种方式(html))
仿联想商城laravel实战---5.无刷新的增删改查(动态页面更新的三种方式(html)) 一.总结 一句话总结: 直接js增加删除修改html 控制器直接返回处理好的页面 用双向绑定插件比如vue ...
- Oracle 行转列总结 Case When,Decode,PIVOT 三种方式 - 转
最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"Decode",索性我就总结一下,一共三种方式 --======= ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)
一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...
- 【转】实现展开列ExpandableListView的三种方式之SimpleExpandableListAdapter实例
原文网址:http://blog.csdn.net/x605940745/article/details/12099709 实现可扩展展开列ExpandableListView的三种方式 欢迎加入QQ ...
- android sqlite使用之模糊查询数据库数据的三种方式
android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有文章来做这样的介绍,所以这里简单的介绍下三种sqlite的模糊查询方式,直接上代码把: package com.e ...
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
随机推荐
- 使用c++爬取股市数据,获取最新行情
最近自己动手写个小软件(界面原生态,还没来得及加样式哈).每天看看潜力股懒人做法,不介意推荐.资源有限,只能观察一下低价股,分析一下运动规律,什么时候拉升,惯性如何 主要功能:读取网络数据:保存本地数 ...
- python+requests+yaml实现接口自动化用例
前言:最近也思考了一下怎么做接口自动化,以下内容属于自己目前阶段所学习到的内容,也逐渐投入自己实际工作中,把最近的学习新得跟大家分享下,话不多说,切入正题. 对接口自动化测试用例的思考:接口测试大多测 ...
- BigDecimal加减乘除及setScale的用法小结
Bigdecimal初始化: BigDecimal num = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失. BigDecimal num = new Big ...
- 配置Apollo阿波罗.net core 3.1 c#
直接上代码: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(a ...
- C++ delete后的指针在不同编译器下的状态差异
今天看到小伙伴分享的一个问题,小伙伴用的MSVC2019编译器,在对delete后的指针进行取值操作时触发了访问冲突. #include<iostream> using namespace ...
- STC8H开发(十三): I2C驱动DS3231高精度实时时钟芯片
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- Deep Learning-深度学习(二)
深度学习入门 1.随机梯度下降 在之前的学习过程当中,对于损失函数的最为重要的参数的梯度的更新是基于数据集中的所有数据,每一个数据都会进行到计算过程当中去,在本案例中,因为波士顿房价预测这个案例所涉及 ...
- 云ATM架构设计
云ATM架构设计 启动程序(Start.java) public class Start { public static void main(String[] args) { MainView vie ...
- 11 MySQL_分组查询和关联查询
分组查询 group by 将某个字段的相同值分为一组,对其他字段的数据进行聚合函数的统计,称为分组查询 单字段分组查询 1.查询每个部门的平均工资 select dept_id,avg(sal) f ...
- Webpack学习系列 - Webpack5 怎么集成Babel ?
程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要通过实操讲解运用Webpack 5 如何集成 Babel Babel 对于前端 ...