Страница 1 из 2
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 9:05
Игорь Столяров
Привет всем !
Помогите пожалуйста начинающему программисту SQL !
Как сделать полную копию таблицы ? Вроде бы:
Код: Выделить всё
CREATE TABLE TableNew As Select * FROM TableOld;
Всё прекрасно получается ... но без индексов и как следствие добавление записей не работает.
Как добавить копирование PRIMARY KEY ? Или создание PRIMARY KEY(RecID) ...
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 11:21
finsoftrz
Игорь, эти вопросы проще погуглить. Например, по словам sqlite clone table.
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 11:51
Игорь Столяров
Гуглил есстестно ...
Там либо какой-то бред, либо заумные рассуждения о работе из командной строки.
Ну и бесконечный копипаст одного и того же. А CLONE - это вообще про БД, а не таблицу.
Думал, может у нас на форуме есть реально работающие с SQL ...
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 12:33
ingasoftplus
I suspect you're missing the difference between CREATE TABLE and CREATE TABLE AS (otherwise known as CTAS).
CREATE TABLE AS allows you to create a table from the resultset of a query.
For example:
Код: Выделить всё
CREATE TABLE PHILSUCKS AS ( SELECT PHIL, SUCKS FROM EGGS );
You could, instead of using CTAS,
use a "normal" CREATE TABLE statement, then INSERT the rows manually. This allows you to specify the PRIMARY KEY and any constraints. eg:
Код: Выделить всё
CREATE TABLE PHILSUCKS
(
PHIL INTEGER PRIMARY KEY,
SUCKS INTEGER NOT NULL
);
INSERT INTO PHILSUCKS ( SELECT PHIL, SUCKS FROM EGGS );
Obviously, you can also create indexes etc too:
Код: Выделить всё
CREATE INDEX EGGSUCKING ON PHILSUCKS (SUCKS);
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 13:27
Игорь Столяров
ingasoftplus писал(а): ↑12 Март 2021, 12:33
use a "normal" CREATE TABLE statement, then INSERT the rows manually
I decided the question a long time ago. But this is a slow solution.
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 13:51
finsoftrz
Игорь Столяров писал(а): ↑12 Март 2021, 11:51
Гуглил есстестно ...
Там либо какой-то бред, либо заумные рассуждения о работе из командной строки.
Ну и бесконечный копипаст одного и того же. А CLONE - это вообще про БД, а не таблицу.
Думал, может у нас на форуме есть реально работающие с SQL ...
Гуглы разные, я перед ответом на всякий случай проверил, народ обсуждал, надо только подальше почитать. Про реально работающих было бесподобно, спасибо.
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 15:07
Игорь Столяров
Я только учусь работать с SQL и не знаю как сделать полноценную копию таблицы одной командой.
Интернет читал какой есть, но не нашёл реального решения.
Сделал по книжке через создание новой таблицы и тупо перелил записи.
Если Вы знаете SQL и понимаете смысл вопроса - помогите пожалуйста его решить.
Если нет - ну буду сам искать, читать дальше интернет и т.д.
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 15:42
gopstop2007
Код: Выделить всё
sqlite> .output c:/sqlite/albums.sql
! указываем в какой файл сохранить
sqlite> .dump albums
!указываем какую таблицу, если не указывать, сохраняет всю базу
sqlite> .quit
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 16:06
Игорь Столяров
Игорь Столяров писал(а): ↑12 Март 2021, 11:51
Там либо какой-то бред, либо заумные рассуждения о работе из командной строки.
Приятно цитировать самого себя. Хоть кто-то читает перед тем как написать. Но всё равно спасибо !
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 16:33
finsoftrz
Я так понял, что штатно нельзя. Можно получить описание таблицы из метаданных, и по нему сгенерить описание новой таблицы. Но это надо пробовать, мне такое не нужно.
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 16:48
Игорь Столяров
Спасибо ... Я пришёл к такому же результату.
В SQL всё хорошо, пока ты идёшь по общей колее, но шаг в сторону и вырастают какие-то циклопические проблемы !
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 17:22
finsoftrz
Тут обычно стандартный ответ, наверно Вы тащите подходы из проектов с isam.
Копирование таблицы SQLite
Добавлено: 12 Март 2021, 17:56
gopstop2007
Код: Выделить всё
DATA
AA CSTRING(4096)
BB CSTRING(4096)
CODE
! получаем схему таблицы
sqldumy{PROP:SQL} = 'SELECT sql FROM sqlite_master WHERE type=`table` AND name=`mytable`'
Next(sqldumy)
AA = sqldumy.field
! получаем индексы -index
sqldumy{PROP:SQL} = 'SELECT sql FROM sqlite_master WHERE type=`index` AND tbl_name=`mytable`'
Next(sqldumy)
BB = sqldumy.field
! найти в строке AA 'mytable' заменить на 'mytable1', выполняем создание таблицы с новым названием
sql{PROP:SQL} = AA
! копируем данные
INSERT INTO mytable1 AS SELECT * FROM mytable
Копирование таблицы SQLite
Добавлено: 13 Март 2021, 11:48
PavelNK
Игорь Столяров писал(а): ↑12 Март 2021, 15:07
Я только учусь работать с SQL и не знаю как сделать полноценную копию таблицы одной командой.
Интернет читал какой есть, но не нашёл реального решения.
Сделал по книжке через создание новой таблицы и тупо перелил записи.
Если Вы знаете SQL и понимаете смысл вопроса - помогите пожалуйста его решить.
Если нет - ну буду сам искать, читать дальше интернет и т.д.
Я не работаю с SQLLite, в основном работаю с MSSQL и подобными.
Если нужно получить абсолютную копию таблицы вместе со всеми индексами и т.д. и т.п., то нужно создать эту таблицу скриптом, а потом скопировать данные. Если описания нет, то можно получить его из системных таблиц, содержащих описание всех объектов БД.
Думаю, что в SQLLite аналогично.
Копирование таблицы SQLite
Добавлено: 13 Март 2021, 13:19
Игорь Столяров
Спасибо ! Как много нужно всего знать в каждом направлении, что бы делать софт ... Блин !