Могу ли я изменить столбец в таблице sqlite на AUTOINCREMENT после создания? - PullRequest
27 голосов
/ 10 марта 2009

Могу ли я сделать поле AUTOINCREMENT после того, как сделал таблицу? Например, если вы создаете таблицу следующим образом:

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

Затем, позже, вы поймете, что ему нужно автоматическое увеличение. Как мне это исправить, т.е. в MySQL можно сделать:

alter table person modify column id integer auto_increment

Является ли создание таблицы единственной возможностью создать столбец AUTOINCREMENT?

Ответы [ 11 ]

33 голосов
/ 05 мая 2012

Вы можете записать содержимое в новую таблицу:

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;
11 голосов
/ 26 апреля 2010

Справочная информация:

Новый ключ будет уникальным во всем ключи в данный момент в таблице, но это может совпадать с ключами, которые были ранее удалены из таблицы. к создавать ключи, которые являются уникальными по время жизни таблицы, добавить AUTOINCREMENT ключевое слово для INTEGER ПЕРВИЧНЫЙ КЛЮЧ декларация.

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

Ограничения SQLite:

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

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

Взлом, кажется, существует:

Похоже, вы можете установить

PRAGMA writable_schema = ON;

Затем выполните ручное обновление таблица sqlite_master для вставки "id INTEGER PRIMARY KEY "в SQL для определение таблицы. Я попробовал это и это похоже на работу. Но это опасно. Если ты испортишь, ты повредить файл базы данных.

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

8 голосов
/ 10 марта 2009

Из SQLite Faq

Краткий ответ: столбец, объявленный INTEGER PRIMARY KEY, будет автоматически увеличиваться

Поэтому, когда вы создаете таблицу, объявите столбец как INTEGER PRIMARY KEY, и столбец будет автоматически увеличиваться при каждой новой вставке.

Или вы используете SQL-оператор ALTER, чтобы изменить тип столбца на INTEGER PRIMARY KEY после факта, но если вы создаете таблицы самостоятельно, лучше всего это сделать в первоначальном операторе создания.

4 голосов
/ 13 февраля 2013

Самый простой способ - просто экспортируйте и реимпортируйте

Это возможно и относительно просто. Экспортируйте базу данных как файл 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
1 голос
/ 22 марта 2017

Вы можете сделать это с помощью SQLite Expert Personal 4:

1) Выберите таблицу и перейдите на вкладку «Дизайн»> вкладка «Столбцы».

2) Нажмите «Добавить», выберите имя нового столбца и введите INTEGER, а не NULL> Ok.

3) Перейдите на вкладку «Первичный ключ» на вкладке «Дизайн». Нажмите «Добавить» и выберите столбец, который вы только что создали. Установите флажок «Автоинкремент».

4) Нажмите «Применить» в правой нижней части окна.

Если вы вернетесь на вкладку «Данные», вы увидите новый столбец с автоматически сгенерированными числами.

1 голос
/ 29 августа 2012

Да, вы можете сделать колонку с автоинкрементом. Измените таблицу и добавьте столбец. Помните, что он имеет тип INTEGER Primary Key.

1 голос
/ 24 марта 2012

В то время как сайт Sqlite дает вам пример того, как это сделать с таблицей, состоящей только из трех полей, он становится неприятным с одним из 30 полей. Учитывая, что у вас есть таблица с именем OldTable со многими полями, первое из которых «ID» заполнено целыми числами. Сделайте копию своей базы данных для резервного копирования. Используя точечные команды командной программы,

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

Откройте Oldtable.txt в Microsoft Word или текстовом редакторе, похожем на grep. Найдите и замените ваши полевые элементы Integer на NULL. (Возможно, вам придется изменить это, чтобы соответствовать вашим полям). Отредактируйте строку «Создать таблицу», чтобы поле, определенное как Integer, теперь было INTEGER PRIMARY KEY AUTOINCREMENT. Сохранить как NewTable.txt

Вернуться в командную программу точка

   .read NewTable.txt

Готово. Идентификатор теперь автоинкремент.

0 голосов
/ 23 мая 2011

Простой ответ, как показано ниже,

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

и все готово.

0 голосов
/ 10 марта 2009

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

Вы должны добавить целочисленный первичный ключ при создании таблицы.

0 голосов
/ 10 марта 2009

Вы можете изменить таблицу, изменив определение столбца

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...