Как работают вставки в представления sqlite?

#view #insert #sqlite

#Вид #вставить #sqlite

Вопрос:

У меня есть схема базы данных, которая идентична в файлах с 1.sqlitedb по n.sqlitedb. Я использую представление для «объединения» всех баз данных. Мой вопрос: когда я вставляю в представление, в какую базу данных вставляются данные? Есть ли какой-либо способ контролировать, кто получает данные? Способ, которым мне нужно разделить данные, зависит от самих данных. По сути, я использую первую букву поля для определения файла, в который оно вставляется. Буду признателен за любую помощь. Спасибо!

Комментарии:

1. Почему вы разделяете данные на несколько файлов? В sqlite нет практического ограничения на размер файла.

2. Я не думаю, что вы сможете. Попробуйте использовать выражение вместо имени базы данных, в которое вы хотите вставить, но я боюсь, что это будет синтаксическая ошибка.

3. буквы являются буквами диска. База данных состоит из отдельных съемных баз данных, и, следовательно, файлы находятся на разных дисках

Ответ №1:

Запись в представления НЕ поддерживается для SQLite, как и для других баз данных.

http://www.sqlite.org/omitted.html

Для достижения аналогичной функциональности необходимо создать триггеры для выполнения необходимой работы.

Ответ №2:

Нам нужно реализовать вместо триггера в представлении (VIEW_NAME) . Итак, когда происходит вставка / обновление view . мы можем вставить базовый объект обновления (ИМЯ_ТАБЛИЦЫ) в тело триггера.

СОЗДАЙТЕ trigger_name ТРИГГЕРА вместо INSERT в VIEW_NAME, НАЧНИТЕ вставлять в TABLE_NAME (col1 ,col2 ) значения ( :new.col1, :new.col2); END;

Ответ №3:

Я не уверен, что понял ваш вопрос, но вы рассматривали возможность использования команды ATTACH DATABASE? Это позволяет подключать отдельные файлы базы данных к единой базе данных. Вы можете управлять вставками в определенную базу данных, добавляя префикс имени базы данных (ВСТАВИТЬ В db1.Таблица).

http://www.sqlite.org/lang_attach.html