精华内容
下载资源
问答
  • 我们使用数据库的时候,会遇到原表中设置的是字段值自增,但是有一些数据迁移或者删减后,发现有一些空缺,这个时候,自增值就会从原来的最大值的下一位开始。 如何使其值重新从指定的数据开始自增呢? alter ...

    我们在使用数据库的时候,会遇到原表中设置的是字段值自增,但是有一些数据迁移或者删减后,发现有一些空缺,这个时候,自增值就会从原来的最大值的下一位开始。

    如何使其值重新从指定的数据开始自增呢?

    alter sequence 你的表依赖的序列(table_name_id_seq)restart with 指定起始值;

    其实在重置起始值前,如果可以的话,就尽量把表清一下重新导数据,这样最终的结果才会满足你的要求

     

     

    展开全文
  • DM 数据库中,自增有两种方法实现,一种是自增列,另一种通过序列实现。1 自增列1.1 创建自增创建表时可以制定列是否自增。 一个表只能有一个自增列。https://www.cndba.cn/dave/article/3590语法格式1.种子...

    在DM 数据库中,自增有两种方法实现,一种是自增列,另一种通过序列实现。

    1 自增列

    1.1 创建自增列

    在创建表时可以制定列是否自增。 一个表只能有一个自增列。

    https://www.cndba.cn/dave/article/3590

    语法格式

    1.种子:装载到表中的第一个行所使用的值;

    2.增量:增量值,该值被添加到前一个已装载的行的标识值上。增量值可以为正数或负数,但不能为 0。

    使用说明

    https://www.cndba.cn/dave/article/3590

    1.IDENTITY 适用于 int(-2147483648~+2147483647)、bigint(-2^63~+2^63-2)类型的列;每个表只能创建一个自增列;

    2.不能对自增列使用 DEFAULT 约束;

    3.必须同时指定种子和增量值,或者二者都不指定。如果二者都未指定,则取默认值(1,1);若种子或增量为小数类型,报错;

    4.最大值和最小值为该列的数据类型的边界;

    5.建表种子和增量大于最大值或者种子和增量小于最小值时报错;

    6.自增列一旦生成,无法更新,不允许用 Update 语句进行修改;

    临时表、列存储表、水平分区表、垂直分区表不支持使用自增列。

    SQL> create table HuaiNing(id int identity,name varchar(20));

    executed successfully

    used time: 6.902(ms). Execute id is 551.

    SQL>

    SQL> desc huaining

    LINEID NAME TYPE$ NULLABLE

    ---------- ---- ----------- --------

    1 ID INTEGER N

    2 NAME VARCHAR(20) Y

    used time: 12.016(ms). Execute id is 552.

    SQL>

    1.2 自增列查询函数

    1)IDENT_SEED (‘tablename’) : 返回种子值,该值是在带有自增列的表中创建自增列时指定的。

    SQL> select ident_seed('CNDBA.HUAINING');

    LINEID IDENT_SEED('CNDBA.HUAINING')

    ---------- ----------------------------

    1 1

    used time: 2.280(ms). Execute id is 553.

    SQL>

    2)IDENT_INCR (‘tablename’):返回增量值,该值是在带有自增列的表中创建自增列时指定的。https://www.cndba.cn/dave/article/3590

    SQL> select ident_incr('CNDBA.HUAINING');

    LINEID IDENT_INCR('CNDBA.HUAINING')

    ---------- ----------------------------

    1 1

    used time: 2.114(ms). Execute id is 555.

    SQL>

    3)SET IDENTITY_INSERT 属性: 设置是否允许将显式值插入表的自增列中。

    语法格式:

    https://www.cndba.cn/dave/article/3590

    SET IDENTITY_INSERT [.] ON | OFF;

    使用说明

    1.IDENTITY_INSERT 属性的默认值为 OFF。SET IDENTITY_INSERT 的设置是在执行或运行时进行的。当一个连接结束,IDENTITY_INSERT 属性将被自动还原为 OFF;

    2.DM 要求一个会话连接中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON,当设置一个新的表 IDENTITY_INSERT 属性设置为 ON 时,之前已经设置为 ON 的表会自动还原为 OFF。当一个表的 IDENTITY_INSERT 属性被设置为 ON 时,该表中的自动增量列的值由用户指定。如果插入值大于表的当前标识值(自增列当前值),则 DM 自动将新插入值作为当前标识值使用,即改变该表的自增列当前值;否则,将不影响该自增列当前值;

    3.当设置一个表的 IDENTITY_INSERT 属性为 OFF 时,新插入行中自增列的当前值由系统自动生成,用户将无法指定;

    4.自增列一经插入,无法修改;

    5.手动插入自增列,除了将 IDENTITY_INSERT 设置为 ON,还要求在插入列表中明确指定待插入的自增列列名。插入方式与非 IDENTITY 表是完全一样的。如果插入时,既不指定自增列名也不给自增列赋值,则新插入行中自增列的当前值由系统自动生成。

    #插入时没有制定id的值:

    SQL> insert into huaining values('dave');

    affect rows 1

    used time: 2.114(ms). Execute id is 557.

    SQL> insert into huaining values('cndba');

    affect rows 1

    SQL> select * from huaining;

    LINEID ID NAME

    ---------- ----------- -----

    1 1 dave

    2 2 cndba

    used time: 1.177(ms). Execute id is 562.

    SQL>

    #将 IDENTITY_INSERT 设置为 ON,然后显示的指定id的值:

    SQL> set identity_insert cndba.huaining on;

    executed successfully

    used time: 1.226(ms). Execute id is 568.

    #注意这里,简写不行:

    SQL> insert into huaining values(4,'hefei');

    insert into huaining values(4,'hefei');

    [-2723]:Error in line: 1

    Only if specified in the column list and SET IDENTITY_INSERT is ON, then identity column could be assigned value.

    used time: 0.862(ms). Execute id is 0.

    SQL> insert into huaining(id,name) values(4,'hefei');

    affect rows 1

    used time: 1.846(ms). Execute id is 569.

    SQL> commit;

    executed successfully

    used time: 10.203(ms). Execute id is 570.

    SQL> select * from huaining;

    LINEID ID NAME

    ---------- ----------- -----

    1 1 dave

    2 2 cndba

    3 4 hefei

    used time: 0.643(ms). Execute id is 571.

    SQL>

    4) 不允许用户修改自增列的值。

    SQL> update huaining set id=3 where name='hefei';

    update huaining set id=3 where name='hefei';

    [-2664]:Error in line: 1

    Try to alter identity column [ID].

    used time: 1.558(ms). Execute id is 0.

    SQL>

    5) 还原 IDENTITY_INSERT 属性。

    SQL> set identity_insert cndba.huaining off;

    executed successfully

    used time: 1.489(ms). Execute id is 572.

    6) 插入后再次查询。

    SQL> insert into huaining values('anqing');

    affect rows 1

    used time: 2.026(ms). Execute id is 573.

    SQL> commit;

    executed successfully

    used time: 10.943(ms). Execute id is 574.

    #注意这里的id值是从5开始的:

    SQL> select * from huaining;

    LINEID ID NAME

    ---------- ----------- ------

    1 1 dave

    2 2 cndba

    3 4 hefei

    4 5 anqing

    used time: 1.757(ms). Execute id is 575.

    SQL>

    2 序列

    序列是一个数据库实体,通过它多个用户可以产生唯一整数值,可以用序列来自动地生成主关键字值。https://www.cndba.cn/dave/article/3590

    2.1 创建序列

    语法格式:

    CREATE SEQUENCE [ .] [ ];

    ::= {}

    ::=

    INCREMENT BY |

    START WITH |

    MAXVALUE |

    NOMAXVALUE|

    MINVALUE |

    NOMINVALUE|

    CYCLE|

    NOCYCLE|

    CACHE |

    NOCACHE|

    ORDER |

    NOORDER |

    GLOBAL |

    LOCAL

    指明被创建的序列属于哪个模式,缺省为当前模式;

    指明被创建的序列的名称,序列名称最大长度128字节;

    指定序列数之间的间隔,这个值可以是[-1000000, 1000000]之间任意的DM正整数或负整数,但不能为0。如果此值为负,序列是下降的,如果此值为正,序列是上升的。如果忽略INCREMENT BY子句,则间隔缺省为1。增量值的绝对值必须小于( - );

    指定被生成的第一个序列数,可以用这个选项来从比最小值大的一个值开始升序序列或比最大值小的一个值开始降序序列。对于升序序列,缺省值为序列的最小值,对于降序序列,缺省值为序列的最大值;

    指定序列能生成的最大值,如果忽略MAXVALUE子句,则降序序列的最大值缺省为 -1 ,升序序列的最大值 缺 省 为9223372036854775807(0x7FFFFFFFFFFFFFFF),若指定的最大值超出缺省最大值,则DM自动将最大值置为缺省最大值。非循环序列在到达最大值之后,将不能继续生成序列数;

    指定序列能生成的最小值,如果忽略MINVALUE子句,则升序序列的最小值缺省为 1 ,降序序列的最小值 缺 省 为 -9223372036854775808(0x8000000000000000),若指定的最小值超出缺省最小值,则DM自动将最小值置为缺省最小值。循环序列在到达最小值之后,将不能继续生成序列数。最小值必须小于最大值;

    CYCLE 该关键字指定序列为循环序列:当序列的值达到最大值/最小值时,序列将从最小值/最大值计数;

    NOCYCLE 该关键字指定序列为非循环序列:当序列的值达到最大值/最小值时,序列将不再产生新值;

    CACHE 该关键字表示序列的值是预先分配,并保持在内存中,以便更快地访问;指定预先分配的值的个数,最小值为2;最大值为50000;且缓存值不能大于( - )/;

    NOCACHE 该关键字表示序列的值是不预先分配;

    ORDER 该关键字表示以保证请求顺序生成序列号;

    NOORDER 该关键字表示不保证请求顺序生成序列号;

    GLOBAL 该关键字表示MPP环境下序列为全局序列,缺省为GLOBAL;

    LOCAL 改关键字表示MPP环境下序列为本地序列。

    创建序列:

    SQL> create table anqing(id int);

    executed successfully

    used time: 5.814(ms). Execute id is 576.

    SQL> create sequence seq_id increment by 10;

    executed successfully

    used time: 4.758(ms). Execute id is 577.

    SQL>

    #插入序列值:

    SQL> create sequence seq_id increment by 10;

    executed successfully

    used time: 4.758(ms). Execute id is 577.

    SQL> insert into anqing(seq_id.nextval);

    insert into anqing(seq_id.nextval);

    insert into anqing(seq_id.nextval);

    *

    line 1, column 34, nearby [;] has error[-2007]:

    Syntax error.

    used time: 1.101(ms). Execute id is 0.

    SQL>

    SQL> insert into anqing(id) values(seq_id.nextval);

    affect rows 1

    used time: 2.996(ms). Execute id is 578.

    SQL> select * from anqing;

    LINEID ID

    ---------- -----------

    1 1

    used time: 2.227(ms). Execute id is 579.

    SQL>

    2.2 序列修改语句

    DM 系统提供序列修改语句,包括修改序列步长值、设置序列最大值和最小值、改变序列的缓存值、循环属性、ORDER 属性。

    语法格式

    https://www.cndba.cn/dave/article/3590

    ALTER SEQUENCE [ .] [ ];

    ::= {}

    ::=

    INCREMENT BY |

    MAXVALUE |

    NOMAXVALUE|

    MINVALUE |

    NOMINVALUE|

    CYCLE|

    NOCYCLE|

    CACHE |

    NOCACHE|

    ORDER|

    NOORDERhttps://www.cndba.cn/dave/article/3590

    #创建完序列后直接修改序列的步长。

    SQL> CREATE SEQUENCE SEQ1 INCREMENT BY 1000 START WITH 5 NOMAXVALUE NOMINVALUE CACHE 10;

    executed successfully

    used time: 7.370(ms). Execute id is 580.

    SQL> ALTER SEQUENCE SEQ1 INCREMENT BY 1 ;

    executed successfully

    used time: 13.188(ms). Execute id is 581.

    SQL> SELECT SEQ1.NEXTVAL FROM DUAL;

    LINEID NEXTVAL

    ---------- --------------------

    1 -994

    used time: 1.474(ms). Execute id is 582.

    SQL>

    #创建序列后使用NEXTVAL访问了序列,然后修改步长。

    SQL> CREATE SEQUENCE SEQ2 INCREMENT BY 1000 START WITH 5 NOMAXVALUE NOMINVALUE NOCACHE ;

    executed successfully

    used time: 10.377(ms). Execute id is 583.

    SQL> SELECT SEQ2.NEXTVAL FROM DUAL;

    LINEID NEXTVAL

    ---------- --------------------

    1 5

    used time: 1.350(ms). Execute id is 584.

    SQL> ALTER SEQUENCE SEQ2 INCREMENT BY 1 ;

    executed successfully

    used time: 5.307(ms). Execute id is 585.

    SQL> SELECT SEQ2.NEXTVAL FROM DUAL;

    LINEID NEXTVAL

    ---------- --------------------

    1 6

    used time: 2.130(ms). Execute id is 586.

    SQL>

    #例3 修改序列的最小值。

    SQL> CREATE SEQUENCE SEQ3 INCREMENT BY 1 START WITH 100 MINVALUE 3 ;

    executed successfully

    used time: 4.964(ms). Execute id is 587.

    SQL> ALTER SEQUENCE SEQ3 MINVALUE 2;

    executed successfully

    used time: 5.278(ms). Execute id is 588.

    SQL>

    2.3 序列删除语句

    DM 系统允许用户在建立序列后还可随时删除序列。

    语法格式:

    DROP SEQUENCE [ .];

    SQL> drop sequence seq3;

    executed successfully

    used time: 14.809(ms). Execute id is 589.

    SQL>

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    展开全文
  • SQL SERVER数据库表ID自增修改和插入ID 为了不影响原来的递增值,可以使用sql的方式来操作,需要一个组合操作,先关闭递增设置,再操作执行DML语句,最后执行开启递增设置,完成。 SET IDENTITY_INSERT ...

    SQL SERVER数据库表ID自增,修改和插入ID

    • 为了不影响原来的递增值,可以使用sql的方式来操作,需要一个组合操作,先关闭递增设置,再操作执行插入语句,最后执行开启递增设置,完成。
    • 如果有修改操作可以通过复制数据的操作来实现,也就是通过重新插入的方式修改 id
    SET IDENTITY_INSERT TABLENAME ON  --关闭
    INSERT INTO TABLENAME(ID,...) VALUES(...)
    SET IDENTITY_INSERT TABLENAME OFF      --开启
    
    展开全文
  • 数据库主键id自增

    万次阅读 2019-04-23 18:23:49
    如果使用工具的话设计表时为主键id勾选上自增选项 mysql mysql: create table users(id int auto_increment primary key not null,name varchar(10)); sql server sql server: create table users(id int ...

    数据库主键id递增

    如果使用工具的话在设计表时为主键id勾选上自增选项

    在这里插入图片描述
    mysql

    mysql:
    //建表设置id为主键并自增
    create table users(id int auto_increment primary key not null,name varchar(10)); 
    //修改表id字段类型为int型+自增属性
    alter table 表名 change id id int auto_increment;
    

    sql server

    sql server:
    create table users(id int identity(1,1) primary key not null,name varchar(10));
    

    oracle

    oracle:
    create sequence users_id_sql increment by 1 start with 1;//users_id_sql为序列名
    
    展开全文
  • alter table 表名 AUTO_INCREMENT=10000;  
  • 问题:Django中新插入一条数据之后,后面还需返回其自增的主键(ID)的值,从而完成后面的操作 修改前: sign_id = models.IntegerField(primary_key=True) 解决: 将IntegerField 换成 AutoField 修改后: sign_id...
  • 索引 文章目录 索引索引的优缺点主键,外键...第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之...
  • 但是对一个表进行多次的测试后,自增项就会变得很大,如100+,甚至几百+,但当我们把表中数据清空后,重新插入数据时,自增项依然增,有强迫症的我表示忍不了 然后百度了一下得到一下方案,希望对大家有帮助 例:...
  • MySQL数据库删除数据自增ID不连续引发的两种情况的解决方法
  • 获取mysql数据库中的自增属性值得方法: 将插入数据自增属性值通过SELECT ...e.g.:User表中有一个id为主键,且设置为自增属性,现在往数据库中插入一条数据,并且要返回自增属性的值。 insert into user (usern
  • Mysql数据库里有这样一张表: id主键设置了自增,是连续排列的。 此时将第五行删除掉: ...再添加一行发现: ...原因是因为主键是唯一的,绝对不能出现重复,只要曾经出现过,哪怕删掉...4、之后再添加新的数据发现...
  • 主要是遗留问题,该表本来只是用于分析,同事没有添加自增id,造成后续处理时,遇到一些问题,需要对表新增一个自增的id字段,以下是个人的解决方法。避免了开发代码。 首先
  • 解决方法:就是 删除数据之后,执行一下语句: 每次删除记录后,执行: ALTER table tableName AUTO_INCREMENT=1; 后面插入数据就是连续的了。
  • 对已有的数据库表customer加一个序号字段,一次性对所有现存客户加上编号,并新建客户时自动增加一个编号,数值自增1。 解决方法: 1、 复制表结构。把原有的customer的表结构复制一份,成为customer_bak 语句:...
  • 数据库修改自增ID的默认值

    千次阅读 2019-04-22 11:31:03
    数据库修改自增ID的默认值postgreSQLmySQL postgreSQL 以cities表为实例 比如修改cities表的自增ID初始值 ALTER SEQUENCE cities_id_seq RESTART WITH 311; mySQL 以cities表为实例 比如修改cities表的...
  • 由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 ‘自增列名称‘)。sql server我测试是2008、2012和2014,都不允许...
  • 解决数据插入数据库出现null空值插入异常的问题。 1.因为本人使用的是oracle数据库,使用sql Developer打开数据库,检查对应异常的表是否建立触发器。 2.如果没有,基表中更改身份信息 3 3.更改完成之后,就完成了...
  • 目录primary key主建auto_increment自增约束如果说我们创建表的时候,忘记创建主键约束如何删除主键修改主键约束唯一约束删除唯一约束modify添加注意not null非空约束default默认约束foreigin_key 外键约束 ...
  • 众所周知,当表中的一列设为自增列之后就不能人为的插入值了,而有些时候我们要让自增列按照自己的意思插入值,那么我们就可以使用以下的方式: SET IDENTITY_INSERT 的用法 SET IDENTITY_INSERT [TABLENAME] {ON|...
  • 创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; 全新的 KaTeX数学公式 语法; 增加了支持甘特图的...
  • 设计数据库字段时,有时需要一个int型的id主键,让它能自动递增,每次插入一条数据,它都能够自动增1或者规定的自增数n。对于特定的数据库,要实现这个很简单,比如mysql是用auto_increment,Sql Server是用...
  • 使用数据库时有时候我们会向自增列插入数据,但是在自增列中数据是无法插入的,这时候我们可以通过SET IDENTITY_INSERT方式来插入数据 自增列使用注意事项: 1.自增列只适用于int和bigint字符类型,其它字符类型不...
  • 1.首先设置数据库字段的自增,和值唯一,字段类型为Integer类型。 2.实体类中通过mybatisPlus注解设置自增。 3.代码正常做添加操作,添加完增加一条sql,获取刚才自增的id。 serviceImpl(实现层): PhotoZbku temp ...
  • 数据库ID自增

    2019-09-28 00:10:57
     我们知道MySQL中如果设置了表id为自增长属性的话,insert语句中如果对id赋值(值没有被用到过)了,则插入的数据的id会为用户设置的值,并且该表的id的最大值会重新计算,以插入后表的id最大值为自增值起点 ...
  • 一般自增用到从1开始自增为1的居多。假定新建的sequence名字为: MY_SE首先:新建一个sequence,定义好起始值,,增值大小,最大值即可。一般自增用到从1开始自增为1的居多。假定新建的sequence名字为: MY_SEQ其次...
  • Pg数据库中设置自增主键,需要先添加序列。 navcat中查看序列,需要点击其他,然后找到序列中去查找。 如果没有,那么就需要手动建立,结构如下: create sequence 'schema'(模式名).'table_name' ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,180
精华内容 31,672
关键字:

怎么在数据库修改数据自增