Обычно модификация данных в My Visual Database производится автоматически, при настройке соответствующего действия кнопки. Вы можете прочитать об этом в главе “Волшебная кнопка MVDB“.
Но вам будет полезно узнать, как можно модифицировать данные с помощью команд SQL. На практике это можно будет использовать в скриптах, а поэкспериментировать можно в SQLite Studio или в программе SQL Executor, описанной в главе “Использование SQL в MVDB“, которую необходимо немного доработать.
Если в SQL Executor мы выполним команду, которая не возвращает данных, мы получим сообщение об ошибке:
Добавим вторую кнопку, которую будет использовать для выполнения SQL-команд, не возвращающих данные:
Её отличие от предыдущей кнопки будет в том, что не нужно указывать таблицу для отображения результата выполнения команды (4).
Добавление
Для вставки одной или нескольких записей в таблицу используется команда INSERT,
INSERT [<модификатор>] INTO <таблица> [ <strong>(</strong> <список полей> <strong>) </strong>] <данные>
Code language: SQL (Structured Query Language) (sql)
<модификатор> – дополнительные указания СУБД, что делать в случае, если вставка данных не может быть выполнена, из-за контроля уникальности или других ограничений. В дальнейшие описания и примеры будут без упоминания о модификаторах этой команды.
Таблица 1. Модификаторы
Модификатор | Действие |
---|---|
INSERT OR REPLACE | Замещение записи: старая запись удаляется, новая запись добавляется. |
INSERT OR ROLLBACK | Отмена текущей транзакции. Если нет активной транзакции, то действует как ABORT |
INSERT OR ABORT | Выполнение текущей операции прерывается, но результаты всех предыдущих операций в текущей транзакции сохраняются. |
INSERT OR FAIL | Выполнение текущей операции прерывается, но результаты изменений текущей операции сохраняются. |
INSERT OR IGNORE | Выполнение текущей операции прерывается, выполнение продолжается со следующей команды SQL.Сообщение об ошибке не возникает. |
☝ Транзакция — это осуществление одного или нескольких изменений базы данных, рассматриваемых как единая операция. Отмена транзакции приводит к отмене всех изменений, которые были ей произведены. В My Visual Database отдельная транзакция создаётся для каждого действия, совершаемого с помощью компонентов или скриптовых команд.
< данные> – указывают, что именно будет добавлено; по формату данных можно выделить три варианта команды INSERT:
Добавление одной или нескольких записей с указанием значений.
INSERT INTO <таблица> <strong>(</strong> <список полей> <strong>)</strong> VALUES <список данных>
Code language: SQL (Structured Query Language) (sql)
<список данных> может состоять из одного или нескольких элементов, разделенных запятой. Каждый элемент представляет собой множество значений, заключенное в круглые скобки, соответствующее по списку полей:
INSERT INTO item (name,code,price) VALUES ('Шуруп','Ш',10)
Code language: SQL (Structured Query Language) (sql)
Добавление данных из другого запроса SELECT
INSERT INTO <таблица> <strong>(</strong> <список полей> <strong>)</strong> SELECT <параметры запроса>
Code language: SQL (Structured Query Language) (sql)
Эта форма позволяет производить массовое добавление записей по результатам выполнения команды SELECT – набор добавляемых данных берётся из результирующего набора команды SELECT. Параметры запроса подробно описываются в главе “Внутреннее устройство SELECT”
Данный пример удваивает содержимое таблицы item, добавляя “золотые” шурупы и гвозди по цене в 100 раз дороже обычных.
INSERT INTO item (name,code,price)
SELECT "Золотой(ая) " || name, "gold_" || code, price * 100
FROM item
Code language: SQL (Structured Query Language) (sql)
Добавление данных по умолчанию
INSERT INTO <таблица> DEFAULT VALUES
Code language: SQL (Structured Query Language) (sql)
Данный вариант использования вставки добавляет одну запись со значениями, определенными как значения по умолчанию.
INSERT INTO item DEFAULT VALUES
Code language: SQL (Structured Query Language) (sql)
В My Visual Database значения по умолчанию могут быть указаны для каждого поля:
☝ Идентификатор добавленной записи можно получить функцией My Visual Database Last_Insert_ID() или SQL-функцией LAST_INSERT_ROWID()
SELECT LAST_UNSERT_ROWID()
Code language: SQL (Structured Query Language) (sql)
Результат
15
Редактирование
Редактирование – это замена данных в определенных записях, поэтому оператор редактирования подразумевает наличие условия, по которому данные будут заменены, в противном случае изменения затронут всю таблицу.
UPDATE [<модификатор>] <таблица>
SET <список изменений>
[ FROM <источник данных> ]
[ WHERE <условие> ]
[ RETURNING <список выражений(полей)> ]
[ <ограничительные опции> ]
Code language: SQL (Structured Query Language) (sql)
Список изменений представляет собой пары, разделенные запятой:
<Поле> <strong>=</strong> <Значение>
Code language: SQL (Structured Query Language) (sql)
Значение может быть задано как литералом, так и подзапросом.
Эта команда установит новое значение для поля name для всех позиций, стоимость которых (поле price) превышает 10:
UPDATE item SET name = 'Золото' WHERE item.prive > 10
Code language: SQL (Structured Query Language) (sql)
☝ My Visual Database SQLite не поддерживает SQL-команду UPDATE FROM (возможно, это связано с обеспечением совместимости с MySQL), но можно добиться аналогичного результат, используя подзапрос в качестве источника данных и задав нужное условие WHERE.
Данный пример позволяет массово отредактировать содержимое поля code, используя в качестве источника данных запрос:
UPDATE item
SET name = (SELECT code FROM item i WHERE i.id = item.id)
WHERE item.id > 10
Code language: SQL (Structured Query Language) (sql)
Модификатор – дополнительные указания СУБД, что делать в случае, если редактирование данных не может быть выполнено. см. описание выше.
Ограничительные опции могут быть использованы только в случае, если в СУБД активирована опция SQLITE_ENABLE_UPDATE_DELETE_LIMIT, которая обычно выключена. Под ограничительными опциями подразумевается использование условий ORDER BY и LIMIT.
Удаление
Вы можете удалить одну, несколько или все записи из выбранной таблицы.
DELETE FROM <таблица> [ WHERE <условие> ] [ <ограничительные опции> ]
Code language: SQL (Structured Query Language) (sql)
Удаление СУБД осуществляет по одной записи, с контролем целостности данных.
Этот пример позволит удалить записи из таблицы, у которых уникальный идентификатор больше 10.
DELETE FROM item WHERE item.id > 10
Code language: SQL (Structured Query Language) (sql)
☝ Будьте осторожны с использованием команды DELETE, так как вернуть удаленные данные будет невозможно! Регулярно делайте резервные копии файла базы данных – sqlite.db. Узнать расположение файла базы данных можно, выбрав в главном меню пункты “Инструменты” – “Настройка”. Подробней см. ”Использование SQLite в MVDB. Настройка подключения к БД”.
И снова – практика!