Подтвердить что ты не робот

Могу ли я изменить столбец в таблице sqlite на AUTOINCREMENT после создания?

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

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

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

alter table person modify column id integer auto_increment

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

4b9b3361

Ответ 1

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

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;

Ответ 2

Фон:

Новый ключ будет уникальным по всем в настоящее время в таблице, но это может перекрываться с ключами, которые были ранее удаленных из таблицы. к создавать ключи, которые уникальны по время жизни таблицы, добавьте Ключевое слово AUTOINCREMENT для INTEGER PRIMARY KEY.

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 для вставки идентификатора INTEGER PRIMARY KEY "в SQL для определение таблицы. Я попробовал и он работает. Но это опасно. Если вы испортите, вы поврежден файл базы данных.

http://www.mail-archive.com/[email protected]/msg26987.html

Ответ 3

Из SQLite Faq

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

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

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

Ответ 4

Простейший путь - просто экспортируйте и повторно импортируйте

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

Ответ 5

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

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

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

Назад в командной строке программы

   .read NewTable.txt

Готово. ID теперь автоинкремент.

Ответ 6

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

Ответ 7

Да У вас установлен phpmyadmin? Я верю, что если вы перейдете на вкладку "структура" и посмотрите вдоль правого столбца (где указаны типы полей) - я думаю, вы можете изменить настройку там, чтобы сделать его автоинкремент. Существует также SQL-запрос, который будет делать то же самое.

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

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

2) Нажмите "Добавить" и выберите новое имя столбца и введите INTEGER и Not Null > Ok.

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

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

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

Ответ 11

ВЫБЕРИТЕ наивысший идентификатор из вашего "псевдо-первичного ключевого столбца", а затем используйте его для своего INSERT. Вот полный пример, который будет работать в PHP 5.3:

$db = new SQLite3(":memory:");
$db->exec("CREATE TABLE foo (id INTEGER, bar VARCHAR)");

for($i=1; $i<=10; $i++) {
    $next_id = $db->querySingle("SELECT id FROM foo ORDER BY id DESC LIMIT 1") +1;
    $db->exec("INSERT INTO foo (id, bar) VALUES ($next_id, 'Just a test.')");
}

$rs = $db->query("SELECT * FROM foo");
while ($row = $rs->fetchArray()) {
    echo $row[id] ." - ". $row[bar] . "<br/>";
}

Результат: "1 - просто тест". - 2 - 3 -... - "10 - Просто тест".

PS: Обратите внимание, что он создает ненужные накладные расходы - лучше использовать "id INTEGER PRIMARY KEY", если это возможно.

Ответ 12

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

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

и все готово.