北京SEO

Mysql设置自增长主键的初始值

2019/10/10/17:37:30  阅读:8652  来源:谷歌SEO算法  标签: SEO知识

本文章是由一个简单的Mysql自增初始值的一个例子引导出大量的关于mysql主键获取 修改及一些常用的例子,下面我们一起来看看希望例子对各位会有帮助.

alter table table_name auto_increment=n;

注意n只能大于已有的auto_increment的整数值,小于的值无效.

show table status like 'table_name' 可以看到auto_increment这一列是表现有的值,步进值没法改变,只能通过下面提到last_inset_id()函数变通使用.

Mysql可以使用AUTO_INCREMENT来设定主键的值为自增长的,其默认值是1,如果想把它的初始值设置为1000,比较笨的办法是先插入一条记录并指定主键的值为999,然后delete改行记录,代码如下:

insert into test(pk) values(999);delete from test where pk = 999;

更好的方法是使用alter的方法来直接修改.例如:

alter table test AUTO_INCREMENT = 1000;

1、不控制主键的起点,代码如下:

  1. createtableemb_t_dictBusType
  2. (
  3. emb_c_busTypeIDintnotnullauto_increment,
  4. emb_c_busTypeEnNamevarchar(255)notnull,
  5. emb_c_busTypeZhNamevarchar(255)notnull,
  6. primarykey(emb_c_busTypeID)
  7. )engine=INNODBdefaultcharset=gbk;

2、控制主键的起点,代码如下:

  1. createtableemb_t_dictBusType
  2. (
  3. emb_c_busTypeIDintnotnullauto_increment,
  4. emb_c_busTypeEnNamevarchar(255)notnull,
  5. emb_c_busTypeZhNamevarchar(255)notnull,
  6. primarykey(emb_c_busTypeID)
  7. )engine=INNODBauto_increment=1001defaultcharset=gbk;

自增主键归零

方法一:如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数.truncate table 表名

方法二:

dbcc checkident (’table_name’, reseed, new_reseed_value) 当前值设置为 new_reseed_value。如果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。否则,下一个插入的行将使用 new_reseed_value + 1。如果 new_reseed_value 的值小于标识列中的最大值,以后引用该表时将产生 2627 号错误信息.

方法二不会清空已有数据,操作比较灵活,不仅可以将自增值归零,也适用于删除大量连续行后,重新设置自增值并插入新的数据;或从新的值开始,当然不能和已有的冲突,代码如下:

  1. $sql="deletefrom$table_vote";
  2. mysql_query($sql,$link);
  3. $sql="altertable$table_voteauto_increment=1";
  4. mysql_query($sql,$link);

获取自增主键【4种方法】

通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键。本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值:

通过JDBC2.0提供的insertRow()方式

通过JDBC3.0提供的getGeneratedKeys()方式

通过SQL select LAST_INSERT_ID()函数

通过SQL @@IDENTITY 变量

1. 通过JDBC2.0提供的insertRow()方式,自jdbc2.0以来,可以通过下面的方式执行,代码如下:

  1. Statementstmt=null;
  2. ResultSetrs=null;
  3. try{
  4. stmt=conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,//创建Statement
  5. java.sql.ResultSet.CONCUR_UPDATABLE);
  6. stmt.executeUpdate("DROPTABLEIFEXISTSautoIncTutorial");
  7. stmt.executeUpdate( //创建demo表
  8. "CREATETABLEautoIncTutorial("
  9. +"priKeyINTNOTNULLAUTO_INCREMENT,"
  10. +"dataFieldVARCHAR(64),PRIMARYKEY(priKey))");
  11. rs=stmt.executeQuery("SELECTpriKey,dataField"//检索数据
  12. +"FROMautoIncTutorial");
  13. rs.moveToInsertRow();//移动游标到待插入行(未创建的伪记录)
  14. rs.updateString("dataField","AUTOINCREMENThere?");//修改内容
  15. rs.insertRow(); //插入记录
  16. rs.last(); //移动游标到最后一行
  17. intautoIncKeyFromRS=rs.getInt("priKey"); //获取刚插入记录的主键preKey
  18. rs.close();
  19. rs=null;
  20. System.out.println("Keyreturnedforinsertedrow:"
  21. +autoIncKeyFromRS);
  22. }finally{
  23. //rs,stmt的close()清理
  24. }//开源代码phpfensi.com

2. 通过JDBC3.0提供的getGeneratedKeys()方式,代码如下:

  1. Statementstmt=null;
  2. ResultSetrs=null;
  3. try{
  4. stmt=conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
  5. java.sql.ResultSet.CONCUR_UPDATABLE);
  6. //...
  7. //省略若干行(如上例般创建demo表)
  8. //...www.phpfensi.com
  9. stmt.executeUpdate(
  10. "INSERTINTOautoIncTutorial(dataField)"
  11. +"values('CanIGettheAutoIncrementField?')",
  12. Statement.RETURN_GENERATED_KEYS);//向驱动指明需要自动获取generatedKeys!
  13. intautoIncKeyFromApi=-1;
  14. rs=stmt.getGeneratedKeys();//获取自增主键!
  15. if(rs.next()){
  16. autoIncKeyFromApi=rs.getInt(1);
  17. }else{
  18. //throwanexceptionfromhere
  19. }
  20. rs.close();
  21. rs=null;
  22. System.out.println("KeyreturnedfromgetGeneratedKeys():"
  23. +autoIncKeyFromApi);
  24. }finally{...}

使用AUTO_INCREMENT时,应注意以下几点:

AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列.

设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍.

AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复.

AUTO_INCREMENT数据列必须具备NOT NULL属性.

AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255,一旦达到上限,AUTO_INCREMENT就会失效.

广告内容

Mysql设置自增长主键的初始值 Mysql设置自增长主键的初始值 Mysql设置自增长主键的初始值

相关阅读

热门评论

卢松松博客 卢松松博客

关注创业者、自媒体人和站长的网站

总篇数167

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法