Обычно модификация данных в 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 itemCode language: SQL (Structured Query Language) (sql)

Добавление данных по умолчанию

INSERT INTO <таблица> DEFAULT VALUESCode language: SQL (Structured Query Language) (sql)

Данный вариант использования вставки добавляет одну запись со значениями, определенными как значения по умолчанию. 

INSERT INTO item DEFAULT VALUESCode 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 > 10Code 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 > 10Code 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 > 10Code language: SQL (Structured Query Language) (sql)

☝ Будьте осторожны с использованием команды DELETE, так как вернуть удаленные данные будет невозможно! Регулярно делайте резервные копии файла базы данных – sqlite.db. Узнать расположение файла базы данных можно, выбрав  в главном меню пункты “Инструменты” – “Настройка”. Подробней см. ”Использование SQLite в MVDB. Настройка подключения к БД”.

И снова – практика!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *