Mysql设置自增长主键的初始值
来源:互联网 发布:淘宝打折网 编辑:程序博客网 时间:2024/05/25 21:35
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、不控制主键的起点
create table emb_t_dictBusType( emb_c_busTypeID int not null auto_increment, emb_c_busTypeEnName varchar(255) not null, emb_c_busTypeZhName varchar(255) not null, primary key(emb_c_busTypeID) )engine=INNODB default charset=gbk;
<span style="font-family: Simsun; background-color: rgb(255, 255, 255);">2、控制主键的起点</span>
<span style="font-family: Simsun; background-color: rgb(255, 255, 255);"></span><pre name="code" class="sql">create table emb_t_dictBusType( emb_c_busTypeID int not null auto_increment, emb_c_busTypeEnName varchar(255) not null, emb_c_busTypeZhName varchar(255) not null, primary key(emb_c_busTypeID) )engine=INNODB auto_increment=1001 default charset=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 号错误信息。 www.111cn.net
方法二不会清空已有数据,操作比较灵活,不仅可以将自增值归零,也适用于删除大量连续行后,重新设置自增值并插入新的数据;或从新的值开始,当然不能和已有的冲突。
$sql="delete from $table_vote"; mysql_query($sql, $link); $sql="alter table $table_vote auto_increment=1"; mysql_query($sql, $link);
通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键。本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值:
获取自增主键【4种方法】
通过JDBC2.0提供的insertRow()方式
通过JDBC3.0提供的getGeneratedKeys()方式
通过SQL select LAST_INSERT_ID()函数
通过SQL @@IDENTITY 变量
1. 通过JDBC2.0提供的insertRow()方式
自jdbc2.0以来,可以通过下面的方式执行。
Statement stmt = null;ResultSet rs = null;try { stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, // 创建Statement java.sql.ResultSet.CONCUR_UPDATABLE); stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial"); stmt.executeUpdate( // 创建demo表 "CREATE TABLE autoIncTutorial (" + "priKey INT NOT NULL AUTO_INCREMENT, " + "dataField VARCHAR(64), PRIMARY KEY (priKey))"); rs = stmt.executeQuery("SELECT priKey, dataField " // 检索数据 + "FROM autoIncTutorial"); rs.moveToInsertRow(); // 移动游标到待插入行(未创建的伪记录) rs.updateString("dataField", "AUTO INCREMENT here?"); // 修改内容 rs.insertRow(); // 插入记录 rs.last(); // 移动游标到最后一行 int autoIncKeyFromRS = rs.getInt("priKey"); // 获取刚插入记录的主键preKey rs.close(); rs = null; System.out.println("Key returned for inserted row: " + autoIncKeyFromRS);} finally { // rs,stmt的close()清理}
2. 通过JDBC3.0提供的getGeneratedKeys()方式
Statement stmt = null;ResultSet rs = null;try { stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE); // ... // 省略若干行(如上例般创建demo表) // ... www.111cn.net stmt.executeUpdate( "INSERT INTO autoIncTutorial (dataField) " + "values ('Can I Get the Auto Increment Field?')", Statement.RETURN_GENERATED_KEYS); // 向驱动指明需要自动获取generatedKeys! int autoIncKeyFromApi = -1; rs = stmt.getGeneratedKeys(); // 获取自增主键! if (rs.next()) { autoIncKeyFromApi = rs.getInt(1); } else { // throw an exception from here } rs.close(); rs = null; System.out.println("Key returned from getGeneratedKeys():" + autoIncKeyFromApi);} finally { ... }
<span style="font-weight: bold; font-family: Simsun; background-color: rgb(255, 255, 255);">使用AUTO_INCREMENT时,应注意以下几点:</span>
AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。
设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。
AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。
AUTO_INCREMENT数据列必须具备NOT NULL属性。
AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。
原文地址:http://www.111cn.net/database/mysql/60352.htm
- Mysql设置自增长主键的初始值
- Mysql设置自增长主键的初始值
- Mysql设置自增长主键的初始值
- Mysql设置自增长主键的初始值
- MySql 主键 自增长 控制主键起点、初始值
- SQL设置自增长列的初始值
- 设置mysql中自动增长的初始值
- mysql 主键自增长并且设置默认值
- mysql 主键自增长
- mysql 主键自增长
- Mysql 主键自增长
- Sqlite3的自增长字段设置为初始值0
- MySql修改自增长ID初始值的解决办法
- mysql数据库的主键自增长
- oracle主键自增长设置
- DB2主键自增长设置
- Oracle 设置主键自增长
- PowerDesigner设置主键自增长
- bzoj 1588 splay树入门题
- B BL指令浅析
- 跨域登录
- 设计模式之桥接模式-bridge
- linux虚拟机增加硬盘存储
- Mysql设置自增长主键的初始值
- UIScrollView的基本属性和协议方法
- .NET基础知识
- GUN ASM概述
- ubuntu分辨率设置
- 判断点与多边形的位置关系
- [无限互联]IOS之MMdrawer框架的使用及实现原理
- sevlet 链接数据库的问题
- HDU-#4112 Break the Chocolate(规律)