2009-07-08 3 views

ответ

5

От SqLite FAQ:

SQLite имеет ограниченную поддержку ALTER TABLE, который можно использовать, чтобы добавить столбец в конец таблицы или изменить имя таблицы. Если вы хотите внести более сложные изменения в структуру таблицы, вам придется воссоздать таблицу. Вы можете сохранить существующие данные во временную таблицу, удалить старую таблицу, создать новую таблицу и затем скопировать данные из временной таблицы.

Например, предположим, что у вас есть таблица с именем «t1» с именами столбцов «a», «b» и «c» и вы хотите удалить столбец «c» из этой таблицы. Следующие шаги иллюстрируют, как это можно сделать:

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; 
+2

вы, вероятно, следует давать кредиты: http://www.sqlite.org/faq.html#q11 – knittl

+1

вероятно, вы должны остановить комментарий 1 год старые entrys – Kovu

+2

Ты говоришь, не скопировал этот стенограмм из FAQ sqlite? –

1

Возможно, это не так - sqlite3 на какое-то время. Вам нужно будет создать еще одну БД с таблицей так, как вы хотите, и скопировать данные на нее. Или создайте новую таблицу, скопируйте данные, опустите оригинал и замените его новым.

0

У вас нет. Нетривиальная модификация таблиц не поддерживается. Что вам нужно будет сделать, это:

  1. Скопируйте данные в таблицу темп падение старого
  2. создать новую таблицу
  3. Копирование данных из исходной таблицы в ней
  4. Создать новую таблицу
  5. Скопируйте данные из температуры в новую таблицу
1

не забывайте, что DROP TABLE капли также связанные с триггерами.

Перед тем, как собираетесь модифицировать таблицу, используйте команду

.scheme TABLE_TO_MODIFY

что сбросит все текущие заявления, которые будут сброшены в том числе Триггеры, что вам нужно заново создать.

Cheers,

Elixon

Смежные вопросы