Проблема параллелизма
Оператор DELETE
Оператор INSERT
Оператор UPDATE
Оператор SELECT
Оператор обеспечивает выборку данных из полей таблицы, указанных в предложении SELECT, в соответствии с условиями, заданными в предложении WHERE .
Пример:Выдать коды и адреса поставщиков, коды которых меньше 7.
SELECT SUPPLIER_ID, ADDRESS
FROM SUPPLIER
WHERE SUPPLIER_ID <7;
Результат:
SUPPLIER_ID | ADDRESS |
Киев | |
Минск |
Оператор служит для обновлений значений указанных столбцов применительно к тем строкам, которые удовлетворяют условиям отбора, заданным предложением WHERE.
Пример. Изменить адрес компаний, которые имеют название КМ на Воронеж.
UPDATE SUPPLIER
SET ADRESS=”Воронеж”
WHERE COMPANY NAME=КМ;
В результате таблица SUPPLIER примет вид:
SUPPLIER_ID | COMPANY_NAME | ADDRESS | COST_SUP |
ABC | Киев | ||
A2 | Минск | ||
KM | Воронеж | ||
KMC | Москва | ||
A5 | Москва |
Оператор осуществляет вставку строки в конец указанной таблицы.
Пример.
1) INSERT INTO SUPPLIER
VALUES (12,”A6”,”Орёл”, 100);
В результате таблица SUPPLIER примет вид:
SUPPLIER_ID | COMPANY_NAME | ADDRESS | COST_SUP |
ABC | Киев | ||
A2 | Минск | ||
KM | Воронеж | ||
KMC | Москва | ||
A5 | Москва | ||
А6 | Орел |
Оператор служит для удаления одной или нескольких строк таблицы, определенных в предложении WHERE.
Если предложение WHERE отсутствует, то удаляются все строки таблицы.
Пример. Удалить из таблицы те строки, которые содержат информацию о поставщиках из Киева.
DELETE
FROM SUPPLIER
WHERE ADRESS=”Киев”;
В результате таблица SUPPLIER примет вид:
SUPPLIER_ID | COMPANY_NAME | ADDRESS | COST_SUP |
A2 | Минск | ||
KM | Воронеж | ||
KMC | Москва | ||
A5 | Москва | ||
А6 | Орел |
Лекция 6
При одновременном исполнении нескольких транзакций (при параллельной работе) между ними могут возникать конфликты, приводящие к нарушению целостности БД.
Рассмотрим пример нарушения целостности БД двумя параллельно действующими транзакциями, представленный в табл. .
Время | Операции транзакции А | Операции транзакции В | Результат |
t1 | Читает запись i | ||
t2 | Читает запись i | ||
t3 | К записи i прибавляет число 10 | ||
t4 | К записи i прибавляет число 15 |
В момент t1 транзакция А читает запись i, которая содержит число 10.
В момент t2 другая транзакция читает это же число. В момент t3 транзакция А модифицирует прочитанное число, прибавляя к нему число 10. В результате в БД оказывается число 20. Но в следующий момент транзакция В модифицирует прочитанное число, прибавляя к нему число 15. Таким образам, в записи i оказывается число 25. Это результат параллельной работы этих транзакций. Очевидно, что результат неправильный, т.к. две транзакции в сумме прибавили число 25. Значит, окончательным результатом должно было быть число 35, а не 25.
Фактически результат модификации, выполненной транзакцией А, пропал.