我试图在sqlite3中创建一个自动递增主键的表。我不知道这是否真的可能,但我希望只需指定其他领域。例如:
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下运行sqlite3在cygwin下。
你得到一个免费的,称为ROWID。这是在每个sqlite表,无论你是否要求。
如果包括类型为INTEGER PRIMARY KEY的列,则该列指向自动ROWID列(是其别名)。
ROWID(通过任何名称调用它)在每次插入行时都会被赋予一个值,正如您所期望的。如果在INSERT上显式指定非NULL值,它将获取指定的值,而不是自动递增。如果在INSERT上显式指定NULL值,它将获得下一个自动递增值。
此外,您应该尽量避免:
INSERT INTO people VALUES ("John","Smith");
并使用
INSERT INTO people (first_name,last_name) VALUES ("John","Smith");
代替。第一个版本非常脆弱 – 如果您在表定义中添加,移动或删除列,INSERT将失败或生成不正确的数据(值在错误的列中)。