5. Транзакция
Транзакция -
группа логически связанных операторов
SQL, результаты которых могут быть
зафиксированы или отменены как единое
целое.
Используется
для многопользовательских баз данных.
То есть при сетевых запросах к ней.
Вот
к примеру, в инете есть БД авиакомпании.
Клиент делает запрос на наличие свободного
14го места на такой то такойто рейс. Место
свободно, и он его бронирует. Вот вся
эта группа команд и будет транзакцией.
Ее результат можно сохранить. То есть
вызвать оператор commit и место будет
забронировано в базе данных. А можно
ROLLBACKом откатить изменения и место
останется свободным, если клиент
передумал покупать это место.
У
нее есть 4 свойства:
1)Атомарность.Это
когда все входящие в транзакцию операторы
SQL рассматриваются как единая неделимая
группа. То есть либо она выполняется
ВСЯ, либо никакой из операторов не
выполнится.
2)НепротиворечивостьЭто
означает, что состояние БД остается
согласованным и непротиворечивым после
завершения транзакции.
3)ИзолированностьВот
это самое интересное
Это
свойство при котором множество транзакций,
которые выполняются одновременно не
должны взаимодействовать. Рассмотрим
когда 2 клиента у БД авиакомпании
запрашивают место 14 на одном и том же
рейсе. При этом тот кто забронирует это
место первым должен быть единственным
лицом забронировавшим его, а не так что
Клиент1 забронировал, Клиент2 тоже
забронировал, и в результате они летят
друг у друга на коленках
4)ДолговременностьПосле
фиксации транзакции изменения в БД
сохраняются при отключении компьютера
или при выходе его из строя.
6. Group By and Order By
Группировка - это выделение данных по группам. Например, у нас есть таблица служащих employees, где есть привязка пользователей к отделу, в котором они работают. Мы хотим подсчитать число служащих по каждому отделу.
Код SQL |
|||
|
|
||
Сортировка - это выведение данных в определенном порядке, например, служащие отсортированы по ФИО
Код SQL |
|||
|
|
||
GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк. ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.
7. Between
BETWEEN - данный оператор используется в условии WHERE для выбора данных между двумя значениями. Данные могут быть: тестом, числами, даты.
Синтаксис sql between
1 2 3 4 |
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 |
8. Insert into
INSERT — оператор языка SQL, который позволяет добавить строки в таблицу, заполняя их значениями. Значения можно вставлять перечислением с помощью слова values и перечислив их в круглых скобках через запятую или оператором select.
Используя перечисление значений, с указанием столбцов:
INSERT INTO <название таблицы> ([<Имя столбца>, ... ]) VALUES (<Значение>,...)
9. Триггеры
Три́ггер (англ. trigger) — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных: добавлением INSERT, удалением DELETE строки в заданной таблице, или изменением UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.
Момент запуска триггера определяется с помощью ключевых слов BEFORE (триггер запускается до выполнения связанного с ним события; например, до добавления записи) илиAFTER (после события). В случае, если триггер вызывается до события, он может внести изменения в модифицируемую событием запись (конечно, при условии, что событие — не удаление записи). Некоторые СУБД накладывают ограничения на операторы, которые могут быть использованы в триггере (например, может быть запрещено вносить изменения в таблицу, на которой «висит» триггер, и т. п.)
Кроме того, триггеры могут быть привязаны не к таблице, а к представлению (VIEW). В этом случае с их помощью реализуется механизм «обновляемого представления». В этом случае ключевые слова BEFORE и AFTER влияют лишь на последовательность вызова триггеров, так как собственно событие (удаление, вставка или обновление) не происходит.
В некоторых серверах триггеры могут вызываться не для каждой модифицируемой записи, а один раз на изменение таблицы. Такие триггеры называются табличными.
Пример (Oracle):
/* Триггер на уровне таблицы */
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
AFTER UPDATE ON district
BEGIN
INSERT INTO info VALUES ('table "district" has changed');
END;
В этом случае для отличия табличных триггеров от строчных вводится дополнительные ключевые слова при описании строчных триггеров. В Oracle это словосочетание FOR EACH ROW.
Пример:
/* Триггер на уровне строки */
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
AFTER UPDATE ON district FOR EACH ROW
BEGIN
INSERT INTO info VALUES ('one string in table "district" has changed');
END;
