在sqlite有一个自动增量?

我想在Sqlite3中创build一个自动递增主键的表。 我不确定这是否真的可行,但我希望只能指定其他领域。 例如:

CREATE TABLE people (id integer primary key auto increment, first_name varchar(20), last_name varchar(20)); 

然后,当我添加一个值,我只希望只需要做:

 INSERT INTO people VALUES ("John", "Smith"); 

这甚至有可能吗?

我在Windows 7中运行cygwin下的sqlite3

你得到一个免费的,叫做ROWID。 无论您是否要求,这都在每个SQLite表中。

如果包含INTEGER PRIMARY KEYtypes的列,则该列将指向自动ROWID列的(是别名)。

每当你插入一行时,ROWID(无论你称之为什么名字)都被分配一个值,就像你期望的那样。 如果您在INSERT上明确指定一个非NULL值,它将获得指定的值而不是自动增量。 如果您在INSERT上明确指定一个NULL值,它将获得下一个自动增量值。

另外,你应该尽量避免:

  INSERT INTO people VALUES ("John", "Smith"); 

并使用

  INSERT INTO people (first_name, last_name) VALUES ("John", "Smith"); 

代替。 第一个版本非常脆弱 – 如果您添加,移动或删除表定义中的列,则INSERT将失败或生成不正确的数据(值错误列中)。

是的,这是可能的。 根据SQLite文档,“一列声明INTEGER PRIMARY KEY将自动增加。 ( http://www.sqlite.org/autoinc.html

你读过这个吗? 如何创build一个AUTOINCREMENT字段。

 INSERT INTO people VALUES (NULL, "John", "Smith"); 

在rowid旁边,您可以定义自己的自动增量字段,但不推荐使用。 当我们使用自动增加的rowid时总是会更好的解决scheme。

“AUTOINCREMENT关键字会增加额外的CPU,内存,磁盘空间和磁盘I / O开销,如果不是非常需要,应该避免这种情况,通常不需要。

在这里阅读详细信息。

SQLite AUTOINCREMENT是用于自动递增表中字段值的关键字。 当创build具有特定列名称的表格时,我们可以使用AUTOINCREMENT关键字自动递增字段值以自动递增。

关键字AUTOINCREMENT只能与INTEGER字段一起使用。 句法:

AUTOINCREMENT关键字的基本用法如下:

CREATE TABLE table_name(column1 INTEGER AUTOINCREMENT,column2 datatype,column3 datatype,….. columnN datatype,);

例如见下文:考虑要创build公司表如下:

SQLite> CREATE TABLE TB_COMPANY_INFO(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL);

现在,将以下logging插入表TB_COMPANY_INFO:

INSERT INTO TB_COMPANY_INFO(NAME,AGE,ADDRESS,SALARY)VALUES('MANOJ KUMAR',40,'Meerut,UP,INDIA',200000.00);

现在selectloggingSELECT * FROM TB_COMPANY_INFO ID NAME AGE ADDRESS SALARY 1 Manoj Kumar 40 Meerut,UP,INDIA 200000.00

不应该在PRIMARY KEY附近指定AUTOINCREMENT关键字。 创build自动增量主键并插入的示例:

 $ sqlite3 ex1 CREATE TABLE IF NOT EXISTS room(room_id INTEGER PRIMARY KEY, name VARCHAR(25) NOT NULL, home_id VARCHAR(25) NOT NULL); INSERT INTO room(name, home_id) VALUES ('test', 'home id test'); INSERT INTO room(name, home_id) VALUES ('test 2', 'home id test 2'); SELECT * FROM room; 

会给:

 1|test|home id test 2|test 2|home id test 2