28 sqlite
AUTOINCREMENT
做桌子后我可以做一个字段吗?例如,如果您创建一个这样的表:
create table person(id integer primary key, name text);
Run Code Online (Sandbox Code Playgroud)
然后才意识到需要自动增量.我如何修复它,即在MySQL中你可以做到:
alter table person modify column id integer auto_increment
Run Code Online (Sandbox Code Playgroud)
表创建是创建列的唯一机会AUTOINCREMENT
吗?
Fre*_*man 35
您可以将内容转储到新表:
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;
Run Code Online (Sandbox Code Playgroud)
并重命名表格:
DROP TABLE failed_banks;
ALTER TABLE failed_banks_id RENAME TO failed_banks;
Run Code Online (Sandbox Code Playgroud)
ale*_*2k8 11
背景:
新密钥对于当前表中的所有密钥都是唯一的,但它可能与先前从表中删除的密钥重叠.要创建在表的生命周期内唯一的键,请将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
简答:声明为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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51239 次 |
最近记录: |