我正在尝试找到在SQLite中删除列的最佳方法。以下是我发现的两种方式:
来自官方网站http://www.sqlite.org/faq.html#q11:
BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,b);
INSERT INTO t1_backup SELECT a,b FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b);
INSERT INTO t1 SELECT a,b FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;
来自How to delete or add column in SQLITE?(也来自官方网站http://sqlite.org/lang_altertable.html):
1. create new table as the one you are trying to change,
2. copy all data,
3. drop old table,
4. rename the new one.
第一种方法使用临时表作为中间人来保存值。第二种方法直接将值复制到新表并稍后重命名表名。从顶层来看,这些是我看到的唯一差异。哪一个更有效率?选择一个优于另一个是否有优势?
是否有任何潜在的信息需要注意,如回滚安全?
答案 0 :(得分:0)
使用临时表可能会更慢,因为所有数据都必须复制两次。 但是,创建新表然后重命名它需要更多空间用于实际数据库(需要同时保存旧表和新表),而临时表将存储在temporary database中。
在交易中运行时,这两种方法都非常安全。