加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite的AUTO_INCREMENT问题

发布时间:2020-12-12 20:00:27 所属栏目:百科 来源:网络整理
导读:尝试用Sqlite3写写Demo,发现其不支持AUTO_INCREMENT语法。 百度一下,原来INEGER类型主键其内置有自动增长,只要其INSERT时参数设置为NULL即可。 并且尝试了一下UNIQUE,并不会自动增长。 #include "stdio.h"#include "stdlib.h"#include "ctype.h"#include

尝试用Sqlite3写写Demo,发现其不支持AUTO_INCREMENT语法。

百度一下,原来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 = %sn",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初始值的方法很简单:
    alter table your_table_name AUTO_INCREMENT;

而Sqlite不在存在表里的,所以复杂一点,但也很简单 它主要存在库里的自动表sqlite_sequence 所以复位/重置只要删除相应记录就好! 方法1:
delete from sqlite_sequence where name = 'your_table_name';

要设定设置的话就是修改表记录
    update sqlite_sequence set seq = [起始记录值] where name = 'your_table_name' ;  

顺便提一下,Mysql和Sqlite记录auto_increment的方式有点点不一样,Mysql存的是将要新增记录的自増值,而sqlite存的是最后一条新增记录的自增值,所以Mysql的Auto_Increment是1,而SQLITE是0。但自増都是从1开始。





http://stackoverflow.com/questions/508627/auto-increment-in-sqlite-problem-with-python

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读