表id自增的方法

这篇具有很好参考价值的文章主要介绍了表id自增的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库主键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_seq
       minvalue 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自增的方法
有时候用了useGeneratedKeys 属性但并不生效,也可以参考以下原因

  • 设置keyProperty,keyColumn 的值不正确
  • 数据库的id字段必须设置为自增的
  • 入参有@Param修饰 会导致id无法自动赋值

最后,通过触发器、事件等去实现id自增的方法就不是很推荐了,所以不举例了。文章来源地址https://www.toymoban.com/news/detail-473666.html

到了这里,关于表id自增的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis实战:四、insert 用法(普通插入、返回主键自增的值)

    1.UserMapper.xml 1.指定特殊数据类型 2.<insert >元素,这个标签包含如下属性  2. UserMapperTest  1.只插入一条数据 2.回滚(不写入数据库) 3.插入后判断是否为空(为空/不为空,抛异常) 3.UserMapper 方法一: 使用 JDBC 方式返回主键自增的值  方法二: 使用 selectKey 返回主键的值

    2024年02月07日
    浏览(37)
  • 达梦数据库,数据库重置主键id从1开始

    今天中国国寿XX项目XC环境达梦遇到id主键自增顺序不对的问题,那么如何修改一个表的自增主键顺序呢?下边通过具体测试案例进行深入分析,通过delete/update/truncate/alter观察数据的变换总结出结论,欢迎各位喜欢达梦数据的爱国人士一起研究学习一下。 创建测试表 查看结果

    2024年02月09日
    浏览(29)
  • 生成12位短id,自增且不连续,永不重复,不依赖数据库

    基本思路: 设计模式:单例模式 是否加锁:是 synchronized 获取最后一次生成的时间戳值T0 限定初始时间为2023-08-01 00:00:00,获取当前时间时间戳T1,T1与初始时间的毫秒差值T2,转为16进制,转为字符串为r1,获取该字符串的长度L1 获取L2 (length - L1) ,获取L2位数字的16进制自增数值范围

    2024年02月10日
    浏览(37)
  • mysql中删除数据后,新增数据时id会跳跃,主键自增id不连续

    引言: 在使用MySQL数据库时,有时候我们需要删除某些记录,但是删除记录后可能会导致表中的id不再连续排序。 如何实现删除记录后让id重新排序的功能。 如图: 删除数据后,中间的id不会自动连续。 下面有两种方法进行重新排序: 方法一: 删除表中id,重新添加id字段:

    2024年02月20日
    浏览(35)
  • 如何在Insert插入操作之后,获取自增主键的ID值

    MyBatis中,在大多数情况下,我们向数据库中插入一条数据之后,并不需要关注这条新插入数据的主键ID。我们也知道,正常在DAO中的插入语句虽然可以返回一个int类型的值,但是这个值表示的是插入影响的行数,而不是新插入数据的主键ID。 近期有一个需求,核心是保存一些

    2024年02月09日
    浏览(38)
  • 解释什么是分布式数据库,列举几种常见的分布式数据库系统

    敏感信息和隐私保护是指在收集、存储和使用个人数据时,需要采取一系列措施来保护这些数据的安全和机密性,防止数据被未经授权的第三方访问、使用或泄露。这些措施包括加密、访问控制、数据脱敏、数据加密、隐私政策等。 在隐私保护的技术手段方面,常用的技术包

    2024年02月08日
    浏览(43)
  • 数据库----------约束、主键约束

    目录 1.简介 1.概念 2.作用 3.分类 2.主键约束  1.概念 2.操作 1.添加单列主键 2.添加多列联合主键 3. 通过修改表结构添加主键 4.删除主键 3.自增长约束(auto_increment) 1.概念 2.特点 3.指定自增字段初始值 4.delete和truncate在删除后自增列的变化 4.非空约束(not null) 1.概念 2.语法 3.添加

    2023年04月09日
    浏览(29)
  • 碎嘴子教学mysql数据库自增

    主要分为两种方式: 1.建表时设置自增 2.建表后设置自增 方式一:建表时设置

    2024年02月05日
    浏览(58)
  • SQLServer数据库给某个字段添加自增

    1、启动Microsoft SQL Server Management Studio 18工具 Navicat好像不能设置字段的自增…,所以用了Management Studio 18 2、工具 选项 设计器 3、修改这个字段为自增,并保存! 4、测试,发现此字段自增成功!

    2024年02月15日
    浏览(52)
  • PostgreSQL数据库实现表字段的自增

    在使用MySQL的时候,创建表结构时可以通过 AUTO_INCREMENT 来指定主键是否自增。在PostgreSQL数据库中,使用序列来实现字段的自增。 PostgreSQL序列是一种特殊的用于生产整数序列数据库对象。序列通常用于主键列,与mysql的AUTO_INCREMENT 概念类似。 PostgreSQL 提供三种序列伪类

    2024年02月04日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包