百度一下,原来INEGER类型主键其内置有自动增长,只要其INSERT时参数设置为NULL即可。
并且尝试了一下UNIQUE,并不会自动增长。
#include "stdio.h" #include "stdlib.h" #include "ctype.h" #include "sqlite3.h" #pragma comment(lib,"sqlitelib.lib") #define CHECK_RC(rc,szInfo,szErrMsg,db) if(rc!=sqlITE_OK){\ printf("%s error!/n",szInfo);\ printf("%s/n",szErrMsg);\ sqlite3_free(szErrMsg);\ sqlite3_close(db);\ return 0;} static int callback(void *NotUsed,int argc,char **argv,char **azColName) { int i; for(i=0; i<argc; i++){ printf("%s = %s\n",azColName[i],argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int _tmain(int argc,_TCHAR* argv[]) { sqlite3* db = NULL; char *dbPath = "e:/test.db"; char *szErrMsg = 0; int rc = sqlite3_open( dbPath,&db ); CHECK_RC(rc,"OpenDataBase",db); char *szsql1 = "DROP TABLE IF EXISTS UserInfo;"; rc = sqlite3_exec(db,szsql1,&szErrMsg); CHECK_RC( rc,"Create Table",db); char *szsql = "CREATE TABLE IF NOT EXISTS UserInfo(ID INTEGER PRIMARY KEY,UserName CHAR,PassWord CHAR);"; rc = sqlite3_exec(db,szsql,db); // 插入 rc = sqlite3_exec( db,"INSERT INTO UserInfo VALUES(NULL,'name1','password1');","Insert Data",db ); rc = sqlite3_exec( db,'name2','password2');",&szErrMsg); CHECK_RC( rc,db ); // 查询 szsql = "SELECT * FROM UserInfo"; rc = sqlite3_exec( db,callback,&szErrMsg); sqlite3_close( db ); system("pause"); return 0; }
MysqL与sqlite重置AUTO_INCREMENT
对于Auto_Increment
MysqL重置Auto_Increment初始值的方法很简单:
要设定设置的话就是修改表记录
顺便提一下,MysqL和sqlite记录auto_increment的方式有点点不一样,MysqL存的是将要新增记录的自増值,而sqlite存的是最后一条新增记录的自增值,所以MysqL的Auto_Increment是1,而sqlITE是0。但自増都是从1开始。
MysqL重置Auto_Increment初始值的方法很简单:
alter table your_table_name AUTO_INCREMENT;
而sqlite不在存在表里的,所以复杂一点,但也很简单
所以复位/重置只要删除相应记录就好!
方法1:
delete from sqlite_sequence where name = 'your_table_name';
要设定设置的话就是修改表记录
update sqlite_sequence set seq = [起始记录值] where name = 'your_table_name' ;
http://stackoverflow.com/questions/508627/auto-increment-in-sqlite-problem-with-python
原文链接:https://www.f2er.com/sqlite/200443.html