`

重置表的自增字段

阅读更多

刚刚在转移数据的时候要用到的,上网查了一下,特此记录

 

--删除原表数据
truncate table tb_producttype --truncate方式也可以重置自增字段
-- 重置表的自增字段
DBCC CHECKIDENT (tb_producttype,reseed,0) 

 

要注意的就是重置之前得先删除原表的数据,还有,如果是用truncate删除原表数据的话那么该表不能有外键关系。

 

truncate table命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与delete from 数据表的删除全部数据表记录不一样,delete命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate命令删除的数据是不可以恢复的

可以做一个测试

建一个带有自增字段的表,加入100万数据
然后分别用TRUNCATE和DELETE删除全部数据
然后再向表里插入一条数据

最直观是:
1.TRUNCATE TABLE是非常快的
2.TRUNCATE之后的自增字段从头开始计数了,而DELETE的仍保留原来的最大数值

………………………………………………………………………………………………
注意:这里说的delete是指不带where子句的delete语句
相同点
truncate和不带where子句的delete, 以及drop都会删除表内的数据

不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
    drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.

 
2.delete语句是dml(Data Manipulation language),这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
   truncate,drop是ddl(Data Define language), 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.


3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
  显然drop语句将表所占用的空间全部释放
  truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始).


4.速度,一般来说: drop>; truncate >; delete


5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

分享到:
评论

相关推荐

    mysql自增字段重排 mysql删除表后自增字段从1开始.pdf

    - 如果只想清空表并重置自增字段,可以先取消自增属性,保存后再重新启用,这也可将自增字段重置为1。 3. **插入值的规则**: - 插入NULL或0到自增字段,MySQL会自动生成下一个序列编号。 - 明确插入的数值必须...

    mysql自增字段重排 mysql删除表后自增字段从1开始.docx

    要重置自增字段的起始值,可以在创建表时使用`AUTO_INCREMENT=n`选项,或者使用`ALTER TABLE table_name AUTO_INCREMENT=n`命令。例如,如果你想要自增字段从10开始,你可以执行`ALTER TABLE table_name AUTO_...

    sql2005自增字段归零.docx

    `DBCC CHECKIDENT`命令允许你在不丢失数据的情况下重置自增字段。它的语法是`DBCC CHECKIDENT ('table_name', reseed, new_reseed_value)`。这里: - `'table_name'` 是你要修改的表的名称。 - `reseed` 参数告诉...

    自增字段的SQL语句解决方案

    如果达到自增字段的最大值,需要进行特殊处理,比如重置最大值。 - 处理文本字段: 对于包含大量文本的字段,可以使用`TEXT`类型,并通过`WRITE TEXT`命令写入或读取数据。 ```sql DECLARE @Var VarBinary(16);...

    SQL Server 中调整自增字段的当前初始值

    SQL Server 中调整自增字段的当前初始值 SQL Server 中调整自增字段的当前初始值是指在 SQL Server 中对自增字段的当前初始值进行调整,以解决自增字段的当前初始值与数据库维护的初始自增值不一致的问题。 在 SQL...

    JPA主键策略(针对数据库自增字段重置后无效检查项)

    GenerationType.IDENTITY 是一种常用的主键策略,它使用数据库的自增字段来生成主键。在使用这个策略时,JPA会将主键的生成工作交由数据库完成,hibernate 不会介入。这意味着,数据库将负责生成主键,而不是...

    Oracle 实现类似SQL Server中自增字段的一个办法

    在SQL Server中,创建自增字段只需在创建表时指定`IDENTITY`属性,如: ```sql CREATE TABLE TABLE1 ( procid INT IDENTITY(1,1), ... ); ``` 而在Oracle中,需要额外的`SEQUENCE`和`TRIGGER`来达到相同效果...

    设置db2 字段自增长

    例如,将`user`表中的`id`字段的起始值重置为18: ```sql ALTER TABLE user ALTER COLUMN id RESTART WITH 18; ``` #### 三、使用触发器实现自增长 虽然DB2支持直接使用`GENERATED ALWAYS AS IDENTITY`特性来实现...

    数据库从新排

    - 使用`TRUNCATE TABLE`命令清空表中的所有数据,这会自动重置自增字段的起始值。 - 对于某些版本的MSSQL,可能还需要手动设置起始值,例如通过`DBCC CHECKIDENT`命令: ```sql DBCC CHECKIDENT ('表名', RESEED...

    DataBase的一些小技巧

    例如,假设我们有一个名为`TEST_RESULT_ITEM`的表,其自增字段需要重置为1,可以执行以下语句: ``` DBCC CHECKIDENT (TEST_RESULT_ITEM, RESEED, 1); ``` 这将把`TEST_RESULT_ITEM`表中的自增字段设置为1作为下...

    Mysql面试题主键自增

    2. 自增起始值:默认情况下,自增字段的初始值是1,但可以通过ALTER TABLE语句或CREATE TABLE语句来设置自定义的起始值。 3. 自增步长:默认情况下,每次自增1,也可以自定义增加的步长,如每次增加2或其他数值。 4....

    mysql如何让自增id归0解决方案

    **方法一:清空表并重置自增ID** 如果不再需要表中的历史数据,可以使用`TRUNCATE TABLE`语句来彻底删除表的所有数据,并且自增ID将会重置为1。这是一个快速且不记录日志的操作,因此效率较高。示例如下: ```sql ...

    初学者必读 MySQL 数据库常见问题汇总.docx

    例如,使用以下语句可以将表tbl的自增字段重置为1: ALTER TABLE tbl AUTO_INCREMENT = 1; 2. 如何实现MySQL中的自增长字段 在MySQL中,创建表时可以使用AUTO_INCREMENT关键字来实现自增长字段。例如,以下语句...

    sqlserver自动增长字段设置方法.rar

    在SQL Server数据库管理系统中,自动增长(Identity)字段是一个非常重要的特性,主要用于为表中的记录生成唯一的标识符,通常作为主键使用。本教程将详细解释如何在SQL Server中设置和管理自动增长字段。 首先,...

    mysql中自增auto_increment功能的相关设置及问题

    - 如果需要重置自增计数器,可以使用`ALTER TABLE table_name AUTO_INCREMENT = value;`语句,将自增ID重置为指定值。 - 自增字段不一定要从1开始,可以根据业务需求设置合适的初始值。 总之,理解MySQL的自增...

    oracle中设置自增主键参考

    在Oracle数据库中,自增主键是一种非常实用且常见的设计模式,它能够确保表中的每一条记录都拥有一个唯一的标识符,这对于数据的管理和查询非常重要。本文将详细介绍如何在Oracle中实现自增主键的功能。 #### 创建...

    可以方便设置sql自动编号

    1. **自增字段**:在大多数关系型数据库中,自增字段是一种特殊的整数类型列,它的值会在每次插入新行时自动递增。例如,在MySQL中,我们可以创建一个名为`id`的自增字段: ```sql CREATE TABLE `my_table` ( `...

    SQLite中重置自动编号列的方法

    这将把`Users`表的`seq`字段设置为0,意味着下一次插入新记录时,`id`列将从1开始递增。 或者,你也可以选择删除对应的记录并让SQLite重新创建它: ```sql DELETE FROM sqlite_sequence WHERE name = 'Users';...

    SQL Server 打开或关闭自增长

    在SQL Server中,自增长(IDENTITY)列是一种特殊类型的字段,它会在每次插入新行时自动为该列提供一个唯一的、递增的值。这种功能对于创建序列化的主键非常有用,因为它们确保了数据的唯一性。然而,有时在特定情况...

Global site tag (gtag.js) - Google Analytics