创建SQL表允许NULL(唯一键?)

时间:2015-04-11 22:34:58

标签: sql sqlite

这是我的代码:

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,替换第一列使其说出语法错误。

1 个答案:

答案 0 :(得分:1)

必须autoincrement behavior的INTEGER PRIMARY KEY。

  
      
  1. AUTOINCREMENT关键字会产生额外的CPU,内存,磁盘空间和磁盘I / O开销,如果不是严格需要,应该避免使用。通常不需要它。

  2.   
  3. 在SQLite中,类型为 INTEGER PRIMARY KEY 的列是ROWID的别名(WITHOUT ROWID表除外),它始终是64位有符号整数

    < / LI>   
  4. 在INSERT上,如果未明确给出ROWID或INTEGER PRIMARY KEY列的值,则会自动使用未使用的整数填充它。

  5.   
  6. 如果AUTOINCREMENT关键字出现在INTEGER PRIMARY KEY之后,则会更改自动ROWID分配算法,以防止在数据库的生命周期内重复使用ROWID 。换句话说,AUTOINCREMENT的目的是防止从先前删除的行重用ROWID。

  7.   

唯一不足以触发此行为;并且需要使用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,即使它最终具有相同的亲和力。