У меня есть стол с колонками name
, qty
, rate
. Теперь мне нужно добавить новый столбец COLNew
между столбцами name
и qty
. Как добавить новый столбец между двумя столбцами?Вставить новую колонку в таблицу в sqlite?
ответ
У вас есть два варианта. Во-первых, вы можете просто добавить новый столбец со следующим:
ALTER TABLE {tableName} ADD COLUMN COLNew {type};
Во-вторых, и более сложно, но фактически поставил колонку, в которой вы хотите его, было бы переименовать таблицу:
ALTER TABLE {tableName} RENAME TO TempOldTable;
Затем создайте новую таблицу с отсутствующими колонками:
CREATE TABLE {tableName} (name TEXT, COLNew {type} DEFAULT {defaultValue}, qty INTEGER, rate REAL);
И заполнить его со старыми данными:
INSERT INTO {tableName} (name, qty, rate) SELECT name, qty, rate FROM TempOldTable;
Затем удалите старую таблицу:
DROP TABLE TempOldTable;
Я бы предпочел второй вариант, так как это позволит вам полностью переименовать все, если это будет необходимо.
Вы не добавляете столбцы между другими столбцами в SQL, вы просто добавляете их. Там, где они размещены, полностью зависит от СУБД. Правильное место для обеспечения того, чтобы столбцы выходили в правильном порядке, - это когда вы их select
.
Другими словами, если вы хотите их в порядке {name,colnew,qty,rate}
, вы используете:
select name, colnew, qty, rate from ...
С SQLite, вам нужно использовать alter table
, примером чего является:
alter table mytable add column colnew char(50)
Вы можете добавить новая колонка с запросом
ALTER TABLE TableName ADD COLUMN COLNew CHAR(25)
Но он будет добавлен в конце, а не в конце между существующими столбцами.
У SQLite ограниченная поддержка ALTER TABLE, которую вы можете использовать, чтобы добавить столбец в конец таблицы или изменить имя таблицы.
Если вы хотите внести более сложные изменения в структуру таблицы, вам придется воссоздать таблицу. Вы можете сохранить существующие данные во временную таблицу, удалить старую таблицу, создать новую таблицу и затем скопировать данные из временной таблицы.
Например, предположим, что у вас есть таблица с именем «t1» с именами столбцов «a» и «c» и что вы хотите вставить столбец «b» из этой таблицы.Следующие шаги показывают, как это можно сделать:
BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,c);
INSERT INTO t1_backup SELECT a,c FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b, c);
INSERT INTO t1 SELECT a,c FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;
Теперь вы готовы для вставки новых данных следующим образом:
UPDATE t1 SET b='blah' WHERE a='key'
ALTER TABLE {tableName} ADD COLUMN COLNew {type};
UPDATE {tableName} SET COLNew = {base on {type} pass value here};
Это обновление требуется для обработки нулевого значения, ввод значение по умолчанию, которое вам нужно. Как и в вашем случае, вы должны вызвать SELECT
запрос и вы получите порядок столбцов, а paxdiablo уже сказал:
SELECT name, colnew, qty, rate FROM{tablename}
и по-моему, ваше имя столбца, чтобы получить значение от курсора:
private static final String ColNew="ColNew";
String val=cursor.getString(cursor.getColumnIndex(ColNew));
поэтому, если индекс изменяет ваше приложение, он не столкнется с какими-либо проблемами.
Это безопасный путь в том смысле, что в противном случае, если вы используете CREATE temptable
или RENAME table
или CREATE
, будет высокая вероятность потери данных, если не обращаться осторожно, например, в том случае, если ваши транзакции происходят в то время как батарея разрядилась.
Я столкнулся с той же проблемой, и второй метод, предложенный в принятом ответе, как отмечается в комментариях, может быть проблематичным при работе с внешними ключами.
Мое обходное решение заключается в том, чтобы экспортировать базу данных в файл sql, убедившись, что инструкции INSERT содержат имена столбцов. Я делаю это, используя DB Browser for SQLite, который имеет удобную функцию для этого. После этого вам просто нужно отредактировать инструкцию create table и вставить новый столбец, где вы хотите, и заново создать db.
В * NIX-подобных системах просто что-то вдоль линий
cat db.sql | sqlite3 database.db
я не знаю, насколько реально это с очень большими базами данных, но он работал в моем случае.
- 1. Вставить в новую таблицу
- 2. Запрос в новую таблицу SQLite
- 3. результатов вставить в новую таблицу
- 4. Вставить новую строку в таблицу
- 5. Вставить новую таблицу в существующую таблицу mysql?
- 6. Вставить нуль в таблицу Sqlite
- 7. Вставить колонку в PRAAT
- 8. IF ELSE Statement и вставить новую колонку
- 9. Вставить в sqlite python не изменить таблицу
- 10. Как добавить новую таблицу в Sqlite DB
- 11. Значение Вставить Google Таблицы в новую таблицу
- 12. SugarCRM - вставить новую запись в таблицу отношений
- 13. Как вставить затронутые строки в новую таблицу
- 14. Вставить в новую таблицу из нескольких запросов
- 15. Не могу вставить в мою новую таблицу
- 16. Как вставить новую строку в таблицу Postgres?
- 17. Как вставить ResultSet в новую таблицу MYSQL?
- 18. Как изменить и вставить в новую таблицу?
- 19. angularjs Вставить новую строку в таблицу
- 20. sqlite в android, не признающий новую колонку Я добавил
- 21. Объявить и вставить новую таблицу и вставить новые строки в новую таблицу
- 22. невозможно вставить новую строку Sqlite, Ionic2
- 23. ActiveAdmin: не собирает новую колонку, добавленную в таблицу
- 24. Python и SQLite: вставить в таблицу
- 25. Невозможно вставить значения в таблицу sqlite
- 26. SQLite не смог вставить в таблицу
- 27. Вставить в таблицу sqlite на фрагмент прокрутки
- 28. Вставить изображения из url в таблицу Sqlite
- 29. Вставить переменную в таблицу базы данных sqlite
- 30. Вставить в колонку без IDENTITY
`SELECT * FROM mytable`? – EML 2014-07-09 17:00:59
Что задано по умолчанию, если мы не укажем его в существующих строках нового столбца? – Jacob 2014-12-22 10:11:34
Существует очень мало случаев использования, когда вы должны делать `select *` вообще. Иногда это удобно для программ, которые хотят делать открытия таблиц, но для подавляющего большинства применений вы должны явно указывать, что вы хотите, и, следовательно, порядок, в котором вы хотите. – paxdiablo 2014-12-30 08:05:29