• 达梦数据库,数据库重置主键id从1开始


    一、前言

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

    二、delete/update/truncate/alter分别进行测试

    1、创建测试表及基础测试数据。

    创建测试表

    1. --创建测试表,定义id列自增
    2. create table dmtest (id int IDENTITY(1,1) primary key,name varchar(10));
    3. --插入测试数据并提交
    4. set identity_insert dmtest on
    5. insert into dmtest values1,'张三'),(2,'李四'),(3,'王五');
    6. commit;
    7. set identity_insert dmtest off
    8. --插入测试数据
    9. insert into dmtest values'张三'),('李四'),('王五');
    10. commit;

    查看结果:

            可以看出,设置列为主键自增不能重复,不需要赋值插入,默认从1自增。对自增列赋值需要设置SET IDENTITY_INSERT为ON时,才能对自增列赋值。命令如下:set identity_insert 表名 on;

    如果指定id序列后不在指定,后续ID键值会根据目前最大值+1递增,如下图:

     2、delete操作主键自增变化。

     由此可见,delete删除之后再insert,id列会按照删除之前最大值+1进行自增,如果指定id大小插入后再insert也会按照删除之前最大值+1进行自增,因此delete不会改变id自增属性。

    3、update 操作主键自增变化。

     此时update修改会报错,提示:行附近出现错误[-2664]:试图修改自增列[ID].因此,update无法对自增列进行修改。

    4、truncate  操作主键自增变化。

     truncate 表之后发现自增ID序列被重置,充实初始化到建表时状态,从1开始,步长为1进行自增。但是数据丢失了,如果数据量特别大,truncate之后再进行insert势必会造成时间上的浪费。

    5、删除主键属性后再添加,操作主键自增变化

     删除主键自增属性后再添加,无法重置属性,仍然是按照最近一次修改的最大值+1自增。

    三、总结

            通过相关测试结论如下:

    1. delete删除之后再insert,id列会按照删除之前最大值+1进行自增,如果指定id大小插入后再insert也会按照删除之前最大值+1进行自增,因此delete不会改变id自增属性。

    2. update无法对自增列进行修改。

    3.  truncate 表之后发现自增ID序列被重置,充实初始化到建表时状态,从1开始,步长为1进行自增,但是数据丢失了。

    总之如下:

            清空表清空表数据,新增数据时,主键仍然从未删除之前的最后一条数据开始增加。
            截断表清空表数据,新增数据时,主键从1开始,相当于以下的两条SQL。

    四、解决方案

    1、通过truncate table进行自增属性初始化递增,恢复到建表初始状态。

    2、在不删除数据情况下如何进行ID自增主键初始化排序,从1开始。

    手动指定序列号非自增。如下图:

     不删除数据进行序列自增从1开始。

    1. alter table dmtest drop id;
    2. alter table dmtest add id int IDENTITY(1, 1) not null primary key;

     结果如下图:

            这个可以不删除数据,但是会发生一个问题,就是ID,NAME列的顺序发生了改变,而且达梦不像MySQL那样支持添加字段可以指定在某个字段的前后,即 before、after指定添加列的位置。可能后续版本会新增这个功能。

  • 相关阅读:
    数据湖建设解决方案 2022
    私有git仓库只支持http情况下go mod tidy 和 go get 默认走https的问题处理 GOINSECURE
    Qt Creator中, ui设计中设置属性无效, 会自动变回去问题
    基于springboot的高校失物招领系统毕业设计源码111731
    大数据团队必备的最佳提效工具推荐
    PHP基础面试题
    引擎开发日志:场景编辑器开发难题
    TCP缓存
    针对小程序的漏洞挖掘
    浅谈Java内部锁synchronized
  • 原文地址:https://blog.csdn.net/weixin_42018955/article/details/127855225