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_dictBusType2、控制主鍵的起點
代碼如下 復制代碼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);
獲取自增主鍵【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以來,可以通過下面的方式執行。
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;
使用AUTO_INCREMENT時,應注意以下幾點:
AUTO_INCREMENT是數據列的一種屬性,只適用於整數類型數據列。
設置AUTO_INCREMENT屬性的數據列應該是一個正數序列,所以應該把該數據列聲明為UNSIGNED,這樣序列的編號個可增加一倍。
AUTO_INCREMENT數據列必須有唯一索引,以避免序號重復。
AUTO_INCREMENT數據列必須具備NOT NULL屬性。
AUTO_INCREMENT數據列序號的最大值受該列的數據類型約束,如TINYINT數據列的最大編號是127,如加上UNSIGNED,則最大為255。一旦達到上限,AUTO_INCREMENT就會失效。