MYSQL删除表的记录后如何使ID从1开始_第1页
MYSQL删除表的记录后如何使ID从1开始_第2页
MYSQL删除表的记录后如何使ID从1开始_第3页
MYSQL删除表的记录后如何使ID从1开始_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MYSQL 删除表的记录后如何使 ID 从 1 开始MYSQL 删除表的记录后如何使 ID 从 1 开始http:/ 1:truncatetable 你的表名这样不但将数据全部删除,而且重新定位自增的字段方法 2:deletefrom 你的表名dbcccheckident(你的表名,reseed,0)/重新定位自增的字段,让它从 1 开始方法 3:如果你要保存你的数据,介绍你第三种方法,byQINYI用 phpmyadmin 导出数据库,你在里面会有发现哦编辑 sql 文件,将其中的自增下一个 id 号改好,再导入。truncate 命令是会把自增的字段还原为从 1 开始的,或者你试试把 ta

2、ble_a 清空,然后取消自增,保存,再加回自增,这也是自增段还原为 1 的方法。MySql 数据库唯一编号字段(自动编号字段)在数据库应用,我们经常要用到唯一编号,以标识记录。在 MySQL 中可通过数据列的 AUTO_INCREMENT 属性来自动生成。MySQL 支持多种数据表,每种数据表的自增属性都有差异,这里将介绍各种数据表里的数据列自增属性。ISAM 表如果把一个 NULL 插入到一个 AUTO_INCREMENT 数据列里去, MySQL 将自动生成下一个序列编号。编号从 1 开始,并 1 为基数递增。把 0 插入 AUTO_INCREMENT 数据列的效果与插入 NULL 值一

3、样。 但不建议这样做, 还是以插入 NULL值为好。当插入记录时,没有为 AUTO_INCREMENT 明确指定值,则等同插入 NULL 值。当插入记录时, 如果为 AUTO_INCREMENT 数据列明确指定了一个数值, 则会出现两种情况, 情况一,如果插入的值与已有的编号重复, 则会出现出错信息, 因为 AUTO_INCREMENT 数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。如果用 UPDATE 命令更新自增列,如果列值与已

4、有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。如果用 replace 命令基于 AUTO_INCREMENT 数据列里的值来修改数据表里的现有记录,即AUTO_INCREMENT 数据列出现在了 replace 命令的 where 子句里,相应的 AUTO_INCREMENT 值将不会发生变化。但如果replace 命令是通过其它的 PRIMARYKEYORUNIQUE 索引来修改现有记录的(即 AUTO_INCREMENT 数据列没有出现在replace 命令的 where 子句中),相应的 AUTO_INCREMENT 值-如果设置其为 NULL(如没有对它赋值)的话-

5、就会发生变化。last_insert_id()函数可获得自增列自动生成的最后一个编号。但该函数只与服务器的本次会话过程中生成的值有关。如果在与服务器的本次会话中尚未生成 AUTO_INCREMENT 值,则该函数返回 0。其它数据表的自动编号机制都以 ISAM 表中的机制为基础。MyISAM 数据表删除最大编号的记录后,该编号不可重用。可在建表时可用“AUTO_INCREMENT=n 选项来指定一个自增的初始值。可用 altertabletable_nameAUTO_INCREMENT=n 命令来重设自增的起始值。可使用复合索引在同一个数据表里创建多个相互独立的自增序列,具体做法是这样的:为数

6、据表创建一个由多个数据列组成的 PRIMARYKEYORUNIQUE 索弓并把 AUTO_INCREMENT数据列包括在这个索引里作为它的最后一个数据列。这样,这个复合索引里,前面的那些数据列每构成一种独一无二的组合,最末尾的 AUTO_INCREMENT 数据列就会生成一个与该组合相对应的序列编号。HEAP 数据表HEAP 数据表从 MySQL4.1 开始才允许使用自增列。自增值可通过 CREATETABLE 语句的 AUTO_INCREMENT=n 选项来设置。可通过 ALTERTABLE 语句的 AUTO_INCREMENT=n 选项来修改自增始初值。编号不可重用。HEAP 数据表不支持

7、在一个数据表中使用复合索引来生成多个互不干扰的序列编号。BDB 数据表不可通过 CREATETABLEORALTERTABLE 的 AUTO_INCREMENT=n 选项来改变自增初始值。可重用编号。支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。InnDB 数据表不可通过 CREATETABLEORALTERTABLE 的 AUTO_INCREMENT=n 选项来改变自增初始值。不可重用编号。不支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。在使用 AUTO_INCREMENT 时,应注意以下几点:AUTO_INCREMENT 是数据列的一种属性,只适用于整数类型数据

8、列。设置 AUTO_INCREMENT 属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。AUTO_INCREMENT 数据列必须有唯一索引,以避免序号重复。AUTO_INCREMENT 数据歹 U 必须具备 NOTNULL 属性。AUTO_INCREMENT 数据列序号的最大值受该列的数据类型约束,如 TINYINT 数据列的最大编号是127,如加上UNSIGNED,则最大为 255。一旦达到上限,AUTO_INCREMENT 就会失效。当进行全表删除时,AUTO_INCREMENT 会从 1 重新开始编号。全表删除的意思是发出以下两条语句

9、时:deletefromtable_name;ortruncatetabletable_name这是因为进行全表操作时, MySQL 实际是做了这样的优化操作: 先把数据表里的所有数据和索引删除,然后重建数据表。如果想删除所有的数据行又想保留序列编号信息,可这样用一个带 where的 delete 命令以抑制 MySQL 的优化:deletefromtable_namewhere1;这将迫使 MySQL 为每个删除的数据行都做一次条件表达式的求值操作。强制 MySQL 不复用已经使用过的序列值的方法是:另外创建一个专门用来生成 AUTO_INCREMENT 序歹 U 的数据表,并做到永远不去删

10、除该表的记录。当需要在主数据表里插入一条记录时,先在那个专门生成序号的表中插入一个 NULL 值以产生一个编号,然后,在往主数据表里插入数据时,利用 LAST_INSERT_ID()函数取得这个编号,并把它赋值给主表的存放序列的数据列。如:insertintoidsetid=NULL;insertintomainsetmain_id=LAST_INSERT_ID();可用 alter 命令给一个数据表增加一个具有 AUTO_INCREMENT 属性的数据列。MySQL会自动生成所有的编号要重新排列现有的序列编号,最简单的方法是先删除该列,再重建该,续的编号序列。的情况下生成序列,可利用带参数的

11、 LAST_INSERT_ID()去插入或修改一个数据列,紧接着又调用不带参数的 LASTexpr 的值。下面演示该方法的具体操作:先创建一个只有一个数据行的数据表:createtableseq_table(idintunsignednotnull);insertintoseq_tablevalues(0);接着用以下操作检索出序列号:updateseq_tablesetseq=LAST_INSERT_ID(seq+1);selectLAST_INSERT_ID();通过修改 seq+1 中的常数值,可生成不同步长的序列,如 seq+10 可生成步长为 10 的序列。该方法可用于计数器,在数据

12、表中插入多行以记录不同的计数值。再配合 LAST_INSERT_ID()函数的返回值生成不同内容的计数值。这种方法的优点是不用事务或 LOCK,UNLOCK 表就可生成唯一的序列编号。不会影响其它客户程序的正常表操作。altertabletable_nameauto_increment=n;注意 n 只能大于已有的 auto_increment 的整数值,小于的值无效.showtablestatusliketable_name可以看至 Uauto_increment 这歹 U 是表现有的值.步进值没法改变.只能通过下面提到 last_inset_id()函数变通使用在使用 AUTO_INCRE

13、MENT 时,应注意以下几点:AUTO_INCREMENT 是数据列的一种属性,只适用于整数类型数据列。设置 AUTO_INCREMENT 属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。AUTO_INCREMENT 数据列必须有唯一索引,以避免序号重复。AUTO_INCREMENT 数据歹 U 必须具备 NOTNULL 属性。AUTO_INCREMENT 数据列序号的最大值受该列的数据类型约束,如 TINYINT 数据列的最大编号是 127,如加上MySQL 会重新生连在不用 AUTO_INCREMENT函数。如果用一个带参数的 LAST

14、_INSERT_ID(expr)INSERT_ID()函数,则第二次函数调用返回的就是UNSIGNED,则最大为 255。一旦达到上限,AUTO_INCREMENT 就会失效。在不用 AUTO_INCREMENT 的情况下生成序列,可利用带参数的 LAST_INSERT_ID()函数。如果用一个带参数的 LAST_INSERT_ID(expr)去插入或修改一个数据列,紧接着又调用不带参数的 LAST_INSERT_ID()函数,则第二次函数调用返回的就是 expr 的值。下面演示该方法的具体操作:先创建一个只有一个数据行的数据表:createtableseq_table(idintunsignednotnull);insertintoseq_tablevalues(0);接着用以下操作检翥出序列号:updateseq_tablesetseq=LAST_INSERT_ID(seq+1);selectLAST

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论