Mysql和Oracle数据库实现主键的自动增长的区别_oracle和mysql 主键-程序员宅基地

技术标签: 主键自增  数据库  数据库总结  

MySQL建表时必须有一个主键(PRIMARY KEY), 并且每条主键内容必须唯一,作为该条数据在表中的唯一标识。同时常常给主键一个”auto_increment”属性,让主键所在字段每条记录都自增”1″。
例如某张表中的”id”作为主键,则mybatis中添加数据的写法可以是:

<insert id="saveSmartUser" parameterType="com.sun.repository.bean.SmartUser"
		useGeneratedKeys="true" keyProperty="id">
		INSERT INTO SMART_USER(USERNAME, PASSWORD, AGE, GENDER) VALUES
		(#{userName},#{password},#{age},#{gender})
</insert>

Oracle没有这个”auto_increment”属性,所以它没法像MySQL般在表内定义自增主键。但是,Oracle里的序列(SEQUENCE)和触发器(TRIGGER),可间接实现自增主键的作用。下面总结了三种oracle中实现主键自增长的方式

1.从数据库查询最大的id值,然后在此基础上加1

<insert id="saveSmartUser" parameterType="com.sun.repository.bean.SmartUser" >
  		<selectKey  keyProperty="id" resultType="int" order="BEFORE">
  			select nvl(max(id),0)+1 from SMART_USER
  		</selectKey>
  		INSERT INTO SMART_USER(ID, USERNAME, PASSWORD, AGE, GENDER) VALUES
		(#{id,jdbcType=DECIMAL},#{userName,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR},#{age,jdbcType=DECIMAL},#{gender,jdbcType=VARCHAR})
</insert>

2.在数据库针对自增长字段创建序列(SEQUENCE),从序列获取自增值

CREATE SEQUENCE SEQ_SMART_USER_ID MINVALUE 1 MAXVALUE 999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  CYCLE ;

随后mybatis添加数据时选取序列的下一个值作为”id”的值

<insert id="saveSmartUser" parameterType="com.sun.repository.bean.SmartUser">
		<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Long">
			SELECT SEQ_SMART_USER_ID.NEXTVAL FROM DUAL
		</selectKey>
		INSERT INTO SMART_USER(ID, USERNAME, PASSWORD, AGE, GENDER) VALUES
		(#{id,jdbcType=DECIMAL},#{userName,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR},#{age,jdbcType=DECIMAL},#{gender,jdbcType=VARCHAR})
</insert>

3.创建序列(SEQUENCE)后创建触发器(TRIGGER)

CREATE SEQUENCE SEQ_SMART_USER_ID MINVALUE 1 MAXVALUE 999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE;

CREATE OR REPLACE TRIGGER SMART_USER_ID_TRG BEFORE INSERT ON SMART_USER
FOR EACH ROW
BEGIN
  SELECT SEQ_SMART_USER_ID.NEXTVAL INTO :new.id FROM DUAL
END;

随后mybatis中的语句可以和mysql的写法一致

<insert id="saveSmartUser" parameterType="com.sun.repository.bean.SmartUser"
        useGeneratedKeys="true" keyProperty="id">
        INSERT INTO SMART_USER(USERNAME, PASSWORD, AGE, GENDER) VALUES
        (#{userName,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR},#{age,jdbcType=DECIMAL},#{gender,jdbcType=VARCHAR})
</insert>

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunroyfcb/article/details/84643011

智能推荐

yum清理重复安装的包-程序员宅基地

文章浏览阅读478次。yum清理重复安装的包 麦老师2017-07-03 14:38:55浏览2596 yum update 列出重复的包 package-cleanup --dupes 删除重复的包 package-cleanup --cleandupes 执行完上面两个命令,再..._package-cleanup --cleandupes

IOCP问题——AIX 6.1 上安装Oracle 12C RAC-程序员宅基地

文章浏览阅读489次。IOCP问题——AIX 6.1 上安装Oracle 12C RACAIX 6.1GI和oracle版本 12.1.0.2两节点RAC故障现象:进行安装前检查./runcluvfy...._aix iocp

Java的修炼之道-程序员宅基地

文章浏览阅读108次。为了帮助对java编程感兴趣的同学更好、更快的提高编程技术,武汉北大青鸟光谷校区专业老师在此推荐几本学习编程非常有用的书籍,以供大家参考。  入门类  1.《java从入门到精通》(第3版)  【内容介绍】   本书从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语...

日志记录器(设计模式--工厂方法模式)_loggerfactory 设计模式-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏44次。当然了,知道工厂方式大家都是很熟悉的方法了。所以我们直接上样例吧。 题目描述:某系统日志记录器要求支持多种日志记录方式,如文件日志记录(FileLog)、数据库日志记录(DatabaseLog)等,且用户可以根据要求动态选择日志记录方式。参考--传送门 实现截图: UML图: ..._loggerfactory 设计模式

研究生毕业论文答辩及格,下周要交学位评审委员会讨论,会影响毕业吗?-程序员宅基地

文章浏览阅读6.1k次。首先恭喜你答辩合格。学位评审委员会不会为难你,只会在看看文章有什么不足之处,之后再拿到手里改改,就可以了。不会影响你毕业。每年学校都会有学位评审跟盲审,都是有机会修改的,所以不必担心。作者:论文辅导员来源:https://www.lwfdy.com/ ..._答辩通过院学位委员会

NYOJ 一种排序_java编写现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这-程序员宅基地

文章浏览阅读256次。时间限制:3000 ms | 内存限制:65535 KB难度:3描述现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);1.按照编号从小到大排序2.对于编号相等的长方形,按照长方形的长排序;3.如果编号和长都相同,按照长方形的宽排序;4.如果编号、长、宽都相同,就..._java编写现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这

随便推点

SpringSecurity OAuth2总结_spring-security-oauth2-程序员宅基地

文章浏览阅读837次。1.Spring Security的认识1.Spring Security的核心功能1.Authentication:身份的验证,用户登陆的验证;2.Authorization:访问授权,授权资源的访问权限;3.安全防护、防止跨站请求、session攻击;4.Spring Security对OAuth的支持更友好;5.Spring Security在网络安全方面下了更多的功夫..._spring-security-oauth2

vue - element 分页器 Pagination 组件封装_vue封装el-pagination-程序员宅基地

文章浏览阅读1.3k次。1. Pagination.vue<template> <div :class="{'hidden':hidden}" class="pagination-container"> <el-pagination :background="background" :current-page.sync="currentPage" ..._vue封装el-pagination

【JAVA】常用加解密算法总结及JAVA实现【BASE64,MD5,SHA,DES,3DES,AES,RSA】_java aes des 3des md5 sha-程序员宅基地

文章浏览阅读4.4k次。BASE64这其实是一种编解码方法,但是只要我们能够将原文变成肉眼不可识别的内容,其实就是一种加密的方法。BASE64 的编码都是按字符串长度,以每 3 个 8 bit 的字符为一组,然后针对每组,首先获取每个字符的 ASCII 编码,然后将 ASCII 编码转换成 8 bit 的二进制,得到一组 3*8=24 bit 的字节。然后再将这 24 bit 划分为 4 个 6 bit 的字节,_java aes des 3des md5 sha

Linux resize2fs: Bad magic number in super-block错误的解决方法-程序员宅基地

文章浏览阅读1.9k次。Linux resize2fs: Bad magic number in super-block错误的解决方法 原创Linux操作系统作者:chenfeng时间:2017-04-06 10:35:18133770 [root@backup binlog]# vgdispla..._resize2fs: bad magic number in super-block 当尝试打开 /dev/mapper/centos-hom

@vue/cli项目启动自动打开浏览器_vue-cli 自动打开浏览器新窗口-程序员宅基地

文章浏览阅读362次。【代码】@vue/cli项目启动自动打开浏览器。_vue-cli 自动打开浏览器新窗口

薪酬激励、股权激励与企业绩效的区别联系-程序员宅基地

文章浏览阅读943次。本文探讨了高管薪酬、高管持股及员工薪酬对公司绩效的影响,对不同激励方式作用大小进行了比较,提出了公司激励机制的改良建议。结果显示高管薪酬和普通员工薪酬对公司绩效均会产生积极作用,且前者效果更为明显。 第一:薪酬激励与公司绩效关系。 刘绍娓和陈超凡 (2010 )研究显示高管薪酬激励可以..._harold demsetz,kenneth lehn(1985)选择511家上市公司作为样本,发现企业管理层持