powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Копирование таблицы (за исключением одного поля)
17 сообщений из 17, страница 1 из 1
Копирование таблицы (за исключением одного поля)
    #38665753
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, в данный момент пишу программу для работы с БД использую SQLITE столкнулся с проблемой, что нельзя удалить поле из записи.Нашел решение в гугле: создать новую таблицу скопировать все данные кроме того поля которое нужно удалить, потом удалить старую таблицу и переименовать новую на старую.Но мои познания в sql оставляют желать лучшего поскольку только начал учить.Заранее спасибо за помощь
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38665767
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вопрос в чем?
Правильно нагуглил или нет? Правильно. В SQLite нельзя удалять поля.
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38665770
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
вопрос в том как скопировать старую таблицу в новую
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38665775
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так и копировать как описано.
Создать новую. Скопировать только то что нужно. Удалить старую. Переименовать новую.
Показывай что ты уже сделал, чтобы мы поняли где ты застрял.
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38665783
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
я не очень понимаю как скопировать всё кроме одной колонки...Я в sql новичек так что прошу прощения за тупняки нашел что то вроде INSERT INTO table 2 SELECT * FROM table 1
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38665785
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
ну и само собой CREATE TABLE table 2
потом копирую
удаляю первую
DROP TABLE table 1
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38665787
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38665790
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
спасибо сейчас изучу и попробую написать
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38665907
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
написал что то вроде
insert into new_table
select
field2, field3, field4
from
old_table;
Хотел узнать правильно ли я составил запрос?и возможно ли написать данный запрос не перечисляя имена всех полей используя(*)
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38666083
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pro100skif,

имхо, перечислить поля придется в любом случае.
попробуй поставить Firefox и в него расширение https://code.google.com/p/sqlite-manager/
откроешь в базу (не забывай про бэкапы)
и можно удалять столбцы там весь код по созданию временных таблиц генерится автоматом.
но нужно обратить внимания на индексы а то их можно потерять.

также в sqlite твою задачу можно решить без insert-а
Код: sql
1.
create table new_table as select field2, field3, field4 from old_table;



Но тут так-же ограничения/индексы при этом слетают - результат если он не для теста нужно доработать напильником :)
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38667047
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PPA,
да мне в программе нужно это реализовать спасибо за помощь
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38667058
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это никогда не нужно реализовывать в программе.
Если тебе это нужно сделать в программе, значит у тебя дизайн программы чрезвычайно плохой.
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38668060
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
ну я в программе использую sqlite а по другому там поле не удалить
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38668156
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pro100skifWhite Owl,
ну я в программе использую sqlite а по другому там поле не удалитьУдалять поля не нужно никогда .
То что ты хочешь сделать (чтобы это ни было) можно решить намного проще и быстрее без удаления полей.
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38668247
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
ну у меня в функционале к курсовой написано что если пользователь захочет то он может удалить поле из БД
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38668263
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pro100skifWhite Owl,
ну у меня в функционале к курсовой написано что если пользователь захочет то он может удалить поле из БДНу твое счастье что у тебя препод дурак если принимает такую курсовую.

Как академическая задача, или просто "чтоб было" такая операция возможна. Но в реальности это не нужно и вредно.
Любая операция изменяющая структуру таблицы это долгая и место-пожирающая операция. Для любой операции (добавление поля, удаление, смена типа) требуется полное копирование таблицы. В некоторых СУБД это уже есть на уровне движка, в некоторых эти операции предполагается делать вручную по уже описанному алгоритму. Но копирование таблицы делается всегда.
Плюс там еще вагон и маленькая тележка проблем на уровне целостности данных.

Конкретно по удалению поля: единственный случай когда это может пригодится, это если в данный момент ты занимаешься дизайном таблицы и еще не четко уверен что в ней нужно.
Если же таблица некоторое время просуществовала и в ней накопились некие данные, то удаление поля тянет за собой потерю данных. Даже если ты эти данные перетащил предварительно в другое поле, ты все равно теряешь возможность сделать слепок исторических данных.
Но еще большая проблема возникает в многопользовательском режиме. Если ты на сервере удалил из базы поле, а клиент Вася не обновил свою клиентскую программу и она обратилась к этому полю - Вася получит ошибку которая скорее всего приведет к результату "всех уволили".
Намного проще (и честнее) просто перестать записывать новые данные в поле которое было признано ненужным. Собственно говоря именно так и работает большинство нормальных программ. Да, иногда для них делается рефакторинг, но это чрезвычайно затратная и сложная операция ... которая практически никогда не делается делается для продуктов проживших более десятка лет. И не важно сколько там "устаревших" полей. Стоимость их удаления будет астрономической.
...
Рейтинг: 0 / 0
Копирование таблицы (за исключением одного поля)
    #38668455
pro100skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
я понял спасибо за объяснение
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Копирование таблицы (за исключением одного поля)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]