AUTOINCREMENT
做桌子后我可以做一个字段吗?例如,如果您创建一个这样的表:
create table person(id integer primary key, name text);
然后才意识到需要自动增量.我如何修复它,即在MySQL中你可以做到:
alter table person modify column id integer auto_increment
表创建是创建列的唯一机会AUTOINCREMENT
吗?
您可以将内容转储到新表:
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;
背景:
新密钥对于当前表中的所有密钥都是唯一的,但它可能与先前从表中删除的密钥重叠.要创建在表的生命周期内唯一的键,请将AUTOINCREMENT关键字添加到INTEGER PRIMARY KEY声明中.
http://www.sqlite.org/faq.html#q1
SQLite限制:
SQLite支持ALTER TABLE的有限子集.SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列.无法重命名列,删除列,或从表中添加或删除约束.
http://www.sqlite.org/lang_altertable.html
哈克似乎存在:
看来你可以设置
PRAGMA writable_schema = ON;
然后手动更新sqlite_master表,在表定义的SQL中插入"id INTEGER PRIMARY KEY".我尝试了它似乎工作.但这很危险.如果搞砸了,就会破坏数据库文件.
http://www.mail-archive.com/sqlite-users@sqlite.org/msg26987.html
来自SQLite Faq
简答:声明为INTEGER PRIMARY KEY的列将自动递增
因此,在创建表时,将列声明为INTEGER PRIMARY KEY,并且列将随每个新插入自动递增.
或者您使用SQL语句ALTER在事后将列类型更改为INTEGER PRIMARY KEY,但如果您自己创建表,则最好在初始创建语句中执行此操作.
这是可能的,而且相对容易。将数据库导出为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