我可以在创建后将sqlite表中的列更改为AUTOINCREMENT吗?

时间:2009-03-10 16:20:13

标签: sqlite

我可以在制作一张桌子之后创建一个字段AUTOINCREMENT吗?例如,如果您创建一个这样的表:

create table person(id integer primary key, name text);

然后才意识到它需要自动增量。我该如何修复它,即在MySQL中你可以做到:

alter table person modify column id integer auto_increment

创建表是创建列AUTOINCREMENT的唯一机会吗?

11 个答案:

答案 0 :(得分:32)

您可以将内容转储到新表:

CREATE TABLE failed_banks_id (id integer primary key autoincrement, name text, city text, state text, zip integer, acquired_by text, close_date date, updated_date date);
INSERT INTO failed_banks_id(name, city, state, zip, acquired_by,close_date, updated_date)
SELECT name, city, state, zip, acquired_by,close_date, updated_date
FROM failed_banks;

重命名表:

DROP TABLE failed_banks;
ALTER TABLE failed_banks_id RENAME TO failed_banks;

答案 1 :(得分:11)

<强>背景

  

新密钥将是独一无二的   目前在表中的键,但它   可能与已经过的密钥重叠   以前从表中删除。至   创建独特的密钥   表的生命周期,添加   INTEGER的AUTOINCREMENT关键字   PRIMARY KEY声明。

http://www.sqlite.org/faq.html#q1

SQLite限制:

  

SQLite支持有限的子集   更改表。 ALTER TABLE命令   在SQLite中允许用户重命名   表或添加新列到   现有表格。这是不可能的   重命名列,删除列或   添加或删除a的约束   表

http://www.sqlite.org/lang_altertable.html

Hack似乎存在:

  

您似乎可以设置

     

PRAGMA writable_schema = ON;

     

然后手动更新   sqlite_master表插入“id   INTEGER PRIMARY KEY“进入SQL for   表定义。我试过了   它似乎工作。但它是   危险的。如果你搞砸了,你   破坏了数据库文件。

http://www.mail-archive.com/sqlite-users@sqlite.org/msg26987.html

答案 2 :(得分:8)

来自SQLite Faq

简答:声明为INTEGER PRIMARY KEY的列将自动增量

因此,在创建表时,将列声明为INTEGER PRIMARY KEY,并且该列将随每个新插入自动递增。

或者您使用SQL语句ALTER在事后将列类型更改为INTEGER PRIMARY KEY,但如果您自己创建表,则最好在初始创建语句中执行此操作。

答案 3 :(得分:4)

最简单的方法 - 只需导出并重新导入

这是可能的,而且相对容易。将数据库导出为sql文件。更改SQL文件并重新导入:

  sqlite3 mydata.db .dump > /tmp/backup.sql
  vi /tmp/backup.sql
  mv mydata.db mydata.db.old
  sqlite3 mydata.db
  sqlite>.read /tmp/backup.sql

答案 4 :(得分:1)

虽然Sqlite网站为您提供了一个如何使用仅包含三个字段的表格的示例,但它会因30个字段中的一个而变得令人讨厌。假设您有一个名为OldTable的表,其中包含许多字段,其中第一个是&#34; ID&#34;充满了整数。 制作数据库的副本以进行备份。 使用命令程序点命令,

    .output Oldtable.txt
    .dump Oldtable
    Drop Table Oldtable;

在Microsoft Word中打开Oldtable.txt或像文本编辑器一样使用grep。使用NULL查找和替换Integer字段元素。(您可能需要调整它以适合您的字段)。编辑“创建表”行,以便定义为“整数”的字段现在为INTEGER PRIMARY KEY AUTOINCREMENT。 另存为NewTable.txt

返回命令程序点

   .read NewTable.txt

完成。 ID现在是自动增量。

答案 5 :(得分:1)

是的,您可以创建一个自动增量的列。修改表并添加一列。请记住,它的类型为INTEGER Primary Key。

答案 6 :(得分:1)

您可以使用SQLite Expert Personal 4

执行此操作

1)选择表格,然后转到“设计”标签&gt; “列”标签。

2)单击“添加”并选择新列名称,然后键入INTEGER和Not Null&gt;确定。

3)转到“设计标签”中的“主键”标签。单击“添加”,然后选择刚刚创建的列。检查“自动增量”框。

4)点击窗口右下角的“应用”。

如果您返回“数据”标签,您会看到包含自动生成数字的新列。

答案 7 :(得分:0)

是 你安装了phpmyadmin吗?我相信如果你进入'结构'选项卡并查看右列(列出字段类型) - 我认为你可以在那里更改设置以使其自动增量。还有一个SQL查询可以执行相同的操作。

答案 8 :(得分:0)

您可以更改表格,更改列定义

答案 9 :(得分:0)

创建SQLite表后,无法更改它。您也无法更改表以向其添加整数主键。

创建表时必须添加整数主键。

答案 10 :(得分:-3)

简单答案如下,

CREATE TABLE [TEST] (
  [ID] INTEGER PRIMARY KEY AUTOINCREMENT, 
  [NAME] VARCHAR(100));

你已经完成了。