Ниже приводится выдержка из руководства SQLite обсуждает команду ALTER TABLE (см URL: SQLite Alter Table):
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу . Невозможно, чтобы переименовать colum, удалите столбец или добавьте или удалите ограничения из таблицы .
Как указано в руководстве, невозможно изменить тип или ограничения столбца, такие как преобразование NULL в NOT NULL. Тем не менее, есть работа вокруг по
- копирование старой таблицы во временную таблицу,
- создать новую таблицу, определенную как хотелось бы, и
- копирование данных из временной таблицы в новую таблицу.
Чтобы предоставить кредит, когда кредит должен быть получен, я узнал об этом из обсуждения № 1 проекта hakanw django-email-usernames на bitbucket.org.
CREATE TABLE test_table(
id INTEGER,
salt TEXT NOT NULL UNIQUE,
step INT,
insert_date TIMESTAMP
);
ALTER TABLE test_table RENAME TO test_table_temp;
CREATE TABLE test_table(
id INTEGER PRIMARY KEY,
salt TEXT,
step INT,
insert_date TIMESTAMP
);
INSERT INTO test_table SELECT * FROM test_table_temp;
DROP TABLE test_table_temp;
Примечание
- Я использовал имя таблицы
test_table
поскольку SQLite будет генерировать ошибку, если вы пытаетесь назвать таблицу table
.
- Команда
INSERT INTO
завершится с ошибкой, если ваши данные не соответствуют новым ограничениям таблицы. Например, если оригинал test_table
содержит два поля id
с таким же целым числом, вы получите «SQL error: PRIMARY KEY must be unique
» при выполнении команды «INSERT INTO test_table SELECT * FROM test_table_temp;
».
- Для всех испытаний, я использовал SQLite версии 3.4.0, включенный как часть Python 2.6.2 работает на моем 13" Unibody MacBook с Mac OS X 10.5.7.
Вам нужно больше информации, включая другие индексы, Ограничения, PK ... Если вы используете MSSQL, то, пожалуйста, сделайте «Script table as ...» -> «Создать в» -> «Новое окно запроса» и вставьте этот скрипт здесь. Тогда кто-то поможет вам создайте сценарии ALTER для изменения. – van