Вы не можете изменить тип столбца. Вы можете создать новую таблицу с использованием правильного типа данных для столбца на этот раз, а затем выбрать данные из старой таблицы и вставить их в новую таблицу. Полная процедура описана в ALTER TABLE documentation:
Помните формат всех индексов и триггеров, связанных с таблицей X. Эта информация будет необходима на этапе 7 ниже. Один из способов сделать это - запустить такой запрос, как: SELECT type, sql FROM sqlite_master WHERE tbl_name='X'
.
Используйте CREATE TABLE
для создания новой таблицы «new_X», которая находится в желаемом пересмотренном формате таблицы X. Убедитесь, что имя «new_X» не сталкивается с каким-либо существующим именем таблицы, конечно.
Передача содержимого из X в new_X с помощью оператора, такого как: INSERT INTO new_X SELECT ... FROM X
.
Если включены ограничения внешнего ключа, отключите их, используя PRAGMA foreign_keys=OFF
.
Оставьте старый стол X: DROP TABLE X
.
Измените имя new_X на X, используя: ALTER TABLE new_X RENAME TO X
.
Использование CREATE INDEX
и CREATE TRIGGER
для восстановления индексов и триггеров, связанных с таблицей X. Возможно использовать старый формат триггеров и индексов, сохраненных с шага 1 выше в качестве руководства, внесение изменений в зависимости от обстоятельств для изменения.
Если ограничения внешнего ключа были первоначально включены (до шага 4), а затем запустить PRAGMA foreign_key_check
, чтобы убедиться, что изменение схемы не нарушало никаких ограничений внешнего ключа, и запустить PRAGMA foreign_keys=ON
для повторного включения внешнего ключа.
Если какие-либо взгляды относятся к таблице X способом, на который влияет изменение схемы, то оставьте эти виды с помощью DROP VIEW
и заново создайте их с любыми изменениями, необходимыми для изменения схемы с использованием CREATE VIEW
.
Примечание, SQLite использует type affinity (определение столбца не изменяет тип данных, вставить в таблицу). Поэтому, если вы измените тип данных, вы также захотите изменить данные.
Какую базу вы используете? sqlite3? – Paulw11
Да, как исправить ошибку? – dawei211