表id自增的方法

news/2024/5/5 22:21:44/文章来源:https://blog.csdn.net/qq_29539827/article/details/130105579

数据库主键id自增的方法,列举了几种如下

一、数据库自增(部分数据库支持)
创建表的时候设置id自增即可,或者后期修改表id自增

# mysql 语法
create table your_table_name(id bigint(20)  not null auto_increment primary key comment '主键', // auto_increment 表示自增(固定死id从1开始,每次加1)name varchar(24) not null
);
# sqlserver 语法
create table [dbo].[your_table_name] ([id] int primary key identity(1,1) not null,// identity(1,1) 表示自增(支持id从N开始,每次加M,这里N,m都=1)[name] varchar(24) not null
);

二、序列号 (适合oracle)

# 创建序列号
create sequence user_seqminvalue 1  --最小值nomaxvalue --最大值start with 1 --起始值increment by 1  --增长基数nocycle  --不循环一直增加nocache ; -- 不使用缓存# 插入数据       
insert into user (user_id, user_name, sex) values (user_seq.nextval, #{userName}, #{sex});

三、mybatis自增 (通用)
sql语句被执行的时候会自动带上主键字段和填充值去执行,语句中就不用写id字段了。useGeneratedKeys属性默认是false的,keyProperty对应实体对象里面的主键id字段名称,keyColumn对应数据库的字段名称

<insert id="addUser" parameterType="com.yulisao.User" useGeneratedKeys="true"keyProperty="userId" keyColumn="user_id">insert into user (user_name, sex) VALUES (#{userName}, #{sex})
</insert>

如果是注解形式的sql,写法如下

@Insert("<script>insert into user (user_name, sex) values (#{userName}, #{sex})</script>")
@Options(useGeneratedKeys=true, keyProperty="userId", keyColumn="user_id")
Integer addUser(User user);

或者自定义取id值

<insert id="addUser" parameterType="com.yulisao.User" useGeneratedKeys="true"keyProperty="userId"><selectKey keyProperty="userId" resultType="int" order="BEFORE"> <!-- order 属性的值和数据库有关, mysql是 after,oracle是 before  --><!-- 自己查询最后使用的id -->select isnull(max(user_id)+1, 1) as userId from user <!-- sqlserver语法--><!-- select 你创建的序列名称.nextval from dual --><!-- oracle 查询最后使用的id --><!-- select LAST_INSERT_ID() --><!-- mysql 查询最后使用的id --><!-- select SCOPE_IDENTITY() --><!-- sqlserver 查询最后的id --></selectKey>insert into user (user_name, sex) values (#{userName}, #{sex});</insert>

拓展知识

  1. <insert>标签包含属性如下
  • id :唯一标识,每条sql语句的id都不一样,如果有重复启动项目时应该会报错
  • parameterType :入参的类名或别名 可选(MyBatis可自动推断入参类型)
  • resultType : 返回结果的类名或别名
  • flushCache :默认值为 true ,任意执行一次都会清空一级缓存和二级缓存
  • timeout :超时时间 单位秒
  • statementType :对于 STATEMENT、PREPARED、ALLABLE, MyBatis 会分别使用对应的 Statement、PreparedStatement、Callable tatement ,默认PREPARED
  • useGeneratedKeys :默认值为false ,如果设置为true, MyBatis 使用 JDBC - getGeneratedKeys 方法来取出由数据库内部生成的主键
  • keyProperty: MyBatis 通过 getGeneratedKeys 获取到的主键id值将要赋值给哪个字段名称(即实体对象里面的驼峰形式userId)
  • keyColumn :只对insert有效,生成的列名是什么 (即数据库表的下划线形式字段名称user_id)是否必须与数据库类型有关,比如PostgreSQL必须
  • databaseId :一个项目用到多个数据库/数据源才使用这个属性。如果配置了 databaseIdProvider,MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。即如果在mybatis的配置文件中没有配置 databaseIdProvider,则databaseId属性不会生效。

更多属性,以及其他标签的属性可以看这里(从XXXMapper.xml里面按住ctrl点击标签或者属性跳进来)
在这里插入图片描述

最后,通过触发器、事件等去实现id自增的方法就不是很推荐了,所以不举例了。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Markdown 语法大全

Markdown是一种轻量级标记语言&#xff0c;常用于撰写博客、文档、论文等。它可以让你使用易读易写的纯文本格式来编写文档&#xff0c;然后通过转换成有效的HTML文档进行发布。以下是Markdown常用的语法&#xff1a; 这里写目录标题标题列表引用一级引用嵌套引用粗体和斜体删除…

Java集合——Set接口学习总结

一、HashSet实现类 1.常用方法 增加&#xff1a;add(E e)删除&#xff1a;remove(Object o)、clear()修改&#xff1a;查看&#xff1a;iterator()判断&#xff1a;contains(Object o)、isEmpty()常用遍历方式&#xff1a;Set<String> set new HashSet<String>()…

Spark 对hadoopnamenode-log文件进行数据清洗并存入mysql数据库

一.查找需要清洗的文件 1.1查看hadoopnamenode-log文件位置 1.2 开启Hadoop集群和Hive元数据、Hive远程连接 具体如何开启可以看我之前的文章&#xff1a;(10条消息) SparkSQL-liunx系统Spark连接Hive_难以言喻wyy的博客-CSDN博客 1.3 将这个文件传入到hdfs中&#xff1a; hd…

windows系统管理_windows server 2016 用户管理

用户账户的概述 **计算机用户账户&#xff1a;**由将用户定义到某一系统的所有信息组成的记录,账户为用户或计算机提供安 全凭证&#xff0c;包括用户名和用户登陆所需要的密码&#xff0c;以及用户使用以便用户和计算机能够登录到网络并 访问域资源的权利和权限。不同的身份拥…

【Obsidian】基础使用手册(包括如何将Obsidian页面设置为中文)

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于工具类软件的笔记 &#x1f236;本篇是Obsidian的基础使用 Obsidian的基础使用将页面设置为中文常用的默认快捷键常用的格式标题代码块表格字体样式列表任务列表官方下载地址&am…

【音视频第11天】GCC论文阅读(2)

A Google Congestion Control Algorithm for Real-Time Communication draft-alvestrand-rmcat-congestion-03论文理解 看中文的GCC算法一脸懵。看一看英文版的&#xff0c;找一找感觉。 目录Abstract1. Introduction1.1 Mathematical notation conventions2. System model3.Fe…

获取淘宝商品分类详情API,抓取淘宝全品类目API接口分享(代码展示、参数说明)

商品分类技巧 淘宝店铺分类怎么设置&#xff1f;我们登录卖家账号的时候&#xff0c;我们看到自己的商品&#xff0c;会想要给商品进行分类&#xff0c;一个好的分类可以帮助提高商品的曝光率。那么在给商品分类前&#xff0c;如果您毫无头绪&#xff0c;以下几点可以给您带来…

车载网络 - Autosar网络管理 - 网络管理简介

一、什么是CAN网络管理及它的作用 现在的车辆是由大量的ECU节点组成的&#xff0c;为了能使各ECU能够正确并及时地进行CAN通信&#xff0c;需要有一套机制来统一协调总线上各节点的休眠唤醒&#xff0c;这套机制就是CAN网络管理&#xff08;NM&#xff09;。 网络管理的目的是保…

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

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

WPF mvvm框架Stylet使用教程-基础用法

Stylet框架基础用法 安装Nuget包 在“管理Nuget程序包”中搜索Stylet&#xff0c;查看Stylet包支持的net版本&#xff0c;然后选择第二个Stylet.Start包进行安装&#xff0c;该包会自动安装stylet并且生成基本的配置 注意事项&#xff1a;安装时要把需要安装的程序设为启动项…

PyCharm2021安装教程

PyCharm是一种Python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于支持Djang…

IntersectionObserver与无限滚动加载

学习链接 IntersectionObserver MDN Api IntersectionObserver API详解 Intersection observer 的概念和用法 过去&#xff0c;要检测一个元素是否可见或者两个元素是否相交并不容易&#xff0c;比如实现图片懒加载、内容无限滚动等功能时&#xff0c;都需要通过​getBound…

[Date structure]时间/空间复杂度

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现&#xff0c;有时候有C/C代码。 ⭐如果觉得文章写的…

linux文件类型和根目录结构

目录 一、Linux文件类型 二、Linux系统的目录结构 1. FHS 2. 路径以及工作目录 &#xff08;1&#xff09;路径 &#xff08;2&#xff09;工作目录 一、Linux文件类型 使用ls -l命令查看到的第一个字符文件类型说明-普通文件类似于Windows的记事本d目录文件类似于Windo…

[NOIP2000 提高组] 进制转换

[NOIP2000 提高组] 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置为指数,以 10为底数的幂之和的形式。例如 123 可表示为 10^22*10^13*10^0 这样的形式。 与之相似的&#xff0c;对二进制数来说&#xff0c;也可表示成…

WordPress添加阿里云OSS对象云储存配置教程

背景&#xff1a;随着页面文章增多&#xff0c;内置图片存储拖连网站响应速度&#xff0c;这里对我来说主要是想提升速度 目的&#xff1a;使用第三方云存储作为图片外存储(图床)&#xff0c;这样处理可以为服务器节省很多磁盘空间&#xff0c;在网站搬家的时候减少文件迁移的工…

2023TYUT移动应用软件开发程序设计和填空

目录 程序设计 程序设计1&#xff1a;根据要求设计UI,补充相应布局文件&#xff0c;即.xml文件 程序设计2&#xff1a;根据要求,补充Activity.java文件 程序填空 说明&#xff1a; 程序设计 程序设计1&#xff1a;根据要求设计UI,补充相应布局文件&#xff0c;即.xml文件…

安装Nginx——docker安装

使用docker安装Nginx 1.开启docker systemctl start docker docker search nginx[rootlocalhost ~]# systemctl start docker //开启docker [rootlocalhost ~]# docker search nginx //搜素镜像 2. docker pull nginxdocker imagesdocker run -…

【ROS】基于WIFI网络实现图像消息跨机实时传输

【开发背景】 研究机器人目标检测算法的时候&#xff0c;常常需要把推理图像实时展示出来&#xff0c;以供观摩。而ROS1提供的跨机通信方法&#xff0c;要么是配置单Master&#xff0c;要么是配置多Master&#xff1b;一方面配置麻烦&#xff0c;另一方面传输效率低下&#xf…

SQL select总结(基于选课系统)

表详情&#xff1a; 学生表&#xff1a; 学院表&#xff1a; 学生选课记录表&#xff1a; 课程表&#xff1a; 教师表&#xff1a; 查询&#xff1a; 1. 查全表 -- 01. 查询所有学生的所有信息 -- 方法一&#xff1a;会更复杂&#xff0c;进行了两次查询&#xff0c;第一…