使用Oracle数据库的java程序员注意:不要再使用generated always as identity了!

news2025/1/21 9:29:53

Identity Columns是在Oracle版本≥12c中的新特性:自增字段

在自增字段后使用以下2种语句的1种即可完成自增:

  1. generated by default as identity
  2. generated always as identity

在userinfo表的基础上,我们来看下区别:

1、使用generated by default as IDENTITY建表

CREATE TABLE userinfo (
	id number(11) generated by default as IDENTITY,--使用自增功能
	name varchar2(20) ,
  	age number(3)
)

这种采用的是默认方式去实现字段自增

该方式下,可以手动插入自增字段的值(也就是手动修改自增的数值),如:

insert into userinfo(name,age) values('张三',18)  --新增成功

insert into userinfo(id,name,age) values(10,'李四',18) --新增成功

2、使用generated always as identity建表

CREATE TABLE userinfo (
  id number(11) generated always as identity,--使用自增功能
  name varchar2(20) ,
    age number(3)
)

这种方式采用always方式自增,也就是只使用自增值去插入

不能手动去指定自增值,否则报错,如下:

insert into userinfo(name,age) values('张三',18)  --新增成功

--新增失败,generated always as identity不能指定自增值
insert into userinfo(id,name,age) values(10,'李四',18) 

错误信息:提示我们不能插入

3、区别总结

  • generated by default as identity:采用的是默认的自增规则去实现字段自增的,在insert时,不指定自增字段,会默认使用自增值去填充,也支持手动指定自增字段的数值
  • generated always as identity:采用always规则去实现字段自增,总是使用自增值去填充,不支持手动指定自增字段的数值
  • 一句话:generated by default as identity包含了generated always as identity,能使用generated by default as identity的地方不要使用generated always as identity

4、Java中做好不要使用generated always as identity原因

我们mybatis插入Oracle数据时,在需要获取自增主键的基础上,generated always as identity方式是无法实现的,只能使用generated by default as identity使用,如下:

  • 无论是哪种方式,Oracle都会生成一个自增序列,我的自增序列为:iseq$$_53168
  • 在mybatis中,useGeneratedKeys和KeyProperty是不支持Oracle的
  • 需要在insert标签中使用selectKey标签去实现

而selectKey就是去提前获取自增字段的自增值,再赋值到insert语句中,从而实现主键获取

如下:

<insert id="insertUser" parameterType="com.shuizhu.domain.User">
    <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer">
        select iseq$$_53168.nextval from dual --"iseq$$_53168"为自动生成的自增序列名称
    </selectKey>
    insert into userinfo(id,name,age) values(#{id},#{name},#{age})
</insert>

注意:必须在insert语句中写明id,#{id},否则再执行selectKey后,自增+1.再执行insert时,又会自增+1,从而造成获取的自增值与数据库真实存入值不相等

generated always as identity不支持手动插入指定值,从而insert语句报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware vSphere 8.0 Update 1 正式版发布 - 企业级工作负载平台

ESXi 8.0 U1 & vCenter Server 8.0 U1 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vsphere-8-u1/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2023-04-18&#xff0c;VMware vSphere 8.0 Update 1 正式…

V2G模式下含分布式能源网优化运行研究(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

LAMP架构的配置

一.LAMP概述 1、LAMP的概念 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态web站点服务及其应用开发环境 LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、…

加速文件传输协议如何工作?

流行的文件传输协议&#xff08;例如FTP / S&#xff0c;SFTP和HTTP / S&#xff09;取决于名为TCP的基础协议。TCP的问题在于&#xff0c;随着网络条件&#xff08;例如延迟和数据包丢失&#xff09;的增加&#xff0c;网络吞吐量会大大降低。这在很大程度上归因于用于确保TCP…

当对象的引用计数为零时

上一篇文章&#xff0c;我提到要避免对象的析构函数被调用两次&#xff0c;有一位读者声称&#xff1a;当对象第一次被构建的时候&#xff0c;它的引用计数应该为 0&#xff0c;在某些时候&#xff0c;例如调用 QueryInterface 的时候&#xff0c;它的 AddRef 方法应该被调用以…

【算法题解】24. 模拟机器人行走

这是一道 中等难度 的题 https://leetcode.cn/problems/walking-robot-simulation/description/ 题目 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以接收以下三种类型的命令 commands &#xff1a; -2 &am…

C++ 引用

什么是引用 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。&#xff08;语法层面来讲&#xff09; 但在底层实际上引用是开辟空间的&#xff0c;类似于指针 …

大数据能力提升项目|学生成果展系列之八

导读 为了发挥清华大学多学科优势&#xff0c;搭建跨学科交叉融合平台&#xff0c;创新跨学科交叉培养模式&#xff0c;培养具有大数据思维和应用创新的“π”型人才&#xff0c;由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

操作系统前置知识

进程 程序存储在磁盘之中&#xff0c;需要加载内存才能执行&#xff0c;包含堆空间、栈空间、全局和静态变量数据、代码&#xff0c;具体执行效果如下所示&#xff1a; 所谓的进程概念就是操作系统为了执行某个程序为其分配的内存资源&#xff0c;该内存资源并不是连续的&…

【数据结构】二叉树的链式结构(笔记总结)内附递归展开图(炒鸡详细)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&…

Web前端基础——盒子模型

&#xff08;1&#xff09;盒子模型的作用&#xff1a; 布局网页&#xff0c;摆放盒子和内容 &#xff08;2&#xff09;盒子模型重要组成部分&#xff1a; 内容区域 - width & height内边框 - padding&#xff08;出现在内容与盒子边缘之间&#xff09;边框线 - border外…

毕业2年,跳槽到下一个公司就25K了,厉害了···

本人本科就读于某普通院校&#xff0c;毕业后通过同学的原因加入软件测试这个行业&#xff0c;角色也从测试小白到了目前的资深工程师&#xff0c;从功能测试转变为测试开发&#xff0c;并顺利拿下了某二线城市互联网企业的Offer&#xff0c;年薪 30W 。 选择和努力哪个重要&a…

建模技能C位秘诀 | 装配式建筑操作技能

剪力墙结构PC构件-预制剪力墙 YUGOU SCHOOL 1、承载力计算&#xff1a;对一、二、三级抗震等级的装配式剪力墙结构&#xff0c;应进行剪力墙水平接缝的抗震受剪承载力验算。 由公式可以看出预制剪力墙水平抗剪主要是靠垂直穿过结合面的竖向抗剪钢筋以及结合面上的轴向压力&a…

RSA-2048-Encoded-Modulus

裸公钥和x509格式公钥的区别 (公钥&#xff0c;非证书) x509 30820122300D06092A864886F70D01010105000382010F003082010A02820101||00 || 256字节的modulus||0203010001 解析: 0203010001 tag length value 结构 &#xff0c;pubExponent 010001 大于7F补 00 &#xff1f;…

C++11多线程:原子操作std::automic-用于多个线程之间共享的变量。

系列文章目录 文章目录 系列文章目录前言一、std::automic二、使用步骤1.代码案例 总结 前言 原子操作std::automic的基本概念和用法。 一、std::automic std::atomic来代表原子操作&#xff0c;std::automic是个类模板。其实std::atomic这个东西是用来封装某个类型的值的。 …

常用 Composition API--ref函数

ref函数--处理基本类型 以前我们的ref属性用处主要用于打标识&#xff0c;像原生js中的id标签一样。我们可以通过这个ref函数可以实现获取input元素&#xff0c;并让他获取焦点触发事件 而在v3中的是ref函数 先提出一个例子&#xff0c;我点击一个按钮&#xff0c;但是页面并…

WordCount 在 MapReduce上运行详细步骤

注意&#xff1a;前提条件hadoop已经安装成功&#xff0c;并且正常启动。 1.准备好eclipse安装包&#xff0c;eclipse-jee-juno-linux-gtk-x86_64.tar.gz&#xff0c;使用SSH Secure File Transfer Client工具把安装包上传于Hadoop集群的名称节点。 2.上传Hadoop在eclipse上运…

C++缺省参数的具体使用

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】 本文来详细介绍C中的缺省参数。正文开始&#xff1a; 目录 一、缺省参数概念二、缺省参数分类2.1全缺省2.2半缺省 三、缺省参数…

Linux上搭建Discuz论坛

一.准备工作 1.下载php*&#xff0c;mariadb-server 2.上传Discuz3.5压缩包并解压 二.搭建过程 基于redhat 9 版本和Discuz3.5&#xff0c;php8.0&#xff0c;mariadb10.5演示 一.准备工作 1.下载php*&#xff0c;mariadb-server [rootredhat9 aaa]# yum install -y php*…

300元的蓝牙耳机什么牌子好?300内无线蓝牙耳机推荐

感受过无线的自在舒适后&#xff0c;越来越多的小伙伴爱上了蓝牙耳机白天出街更潇洒&#xff0c;目前市面上蓝牙耳机琳琅满目可选择性较多价格从几十、几百元到数千元不等然而蓝牙耳机的安全性、舒适性如何&#xff1f;连接稳吗&#xff1f;下面整理了几款300元价位的耳机分享给…