这是我的代码:
CREATE TABLE table(
id int(1) UNIQUE,
name varchar(128) NOT NULL)
ALTER TABLE table ADD UNIQUE KEY id (id);
我不确定我是否需要第二个语句,但无论哪种方式在插入INSERT INTO表(名称)VALUES(“test”)时都不起作用。它说table.id可能不是NULL。我需要做什么才能使其与NULL(和自动增量?)一起使用?
用id int(1) NOT NULL AUTO_INCREMENT,
替换第一列使其说出语法错误。
答案 0 :(得分:1)
列必须是autoincrement behavior的INTEGER PRIMARY KEY。
AUTOINCREMENT关键字会产生额外的CPU,内存,磁盘空间和磁盘I / O开销,如果不是严格需要,应该避免使用。通常不需要它。
在SQLite中,类型为 INTEGER PRIMARY KEY 的列是ROWID的别名(WITHOUT ROWID表除外),它始终是64位有符号整数
< / LI>在INSERT上,如果未明确给出ROWID或INTEGER PRIMARY KEY列的值,则会自动使用未使用的整数填充它。
- 醇>
如果AUTOINCREMENT关键字出现在INTEGER PRIMARY KEY之后,则会更改自动ROWID分配算法,以防止在数据库的生命周期内重复使用ROWID 。换句话说,AUTOINCREMENT的目的是防止从先前删除的行重用ROWID。
唯一不足以触发此行为;并且需要使用AUTOINCREMENT来确保单调递增方案。
因此,要公开代理ROWID 而不保证ID永远不会被重用,请使用:
id INTEGER PRIMARY KEY
要确保永远不会在表/数据库生命周期(这是MySQL自动增量和SQL Server标识列行为)上重用ID,请使用:
id INTEGER PRIMARY KEY AUTOINCREMENT
No other types or can be used for this behavior - 这包括INT
,即使它最终具有相同的亲和力。