Первая таблица с транзакциями

This commit is contained in:
2024-11-08 16:24:55 +03:00
parent e847ed9a01
commit 238f265363
4 changed files with 79 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@@ -671,4 +671,83 @@ $$;
\end{lstlisting}
\subsection{Работа 5: Транзакционная модель}
\textbf{Задача:} Выбрать определённый уровень изоляции транзакций и продемонстрировать наличие или отсутствие артефактов: <<Грязное чтение>>, <<Неповторяемое чтение>> и <<Фантомы>>.
Уровень изоляции \texttt{Read Commited} был задан при помощи команды
\texttt{SET TRANSACTION ISOLATION LEVEL READ COMMITTED;}
На этом уровне изоляции исключается артефакт <<Грязное чтение>>, однако сохраняются артефакты <<Неповторяемое чтение>> и <<Фантомы>>.
В таблице~\ref{tbl:bad_read} представлены транзакции, на примере которых демонстрируется отсутствие артефакта <<Грязное чтение>>.
\begin{table}[h!]
\centering
% \addtocounter{table}{-1}
\caption{Транзакции для демонстрации отсутствия артефакта <<Грязное чтение>>.}
\label{tbl:bad_read}
\footnotesize
\begin{tabularx}{\textwidth}{|c|X|X|}
\hline
t & Транзакция 1 & Транзакция 2 \\
\hline
\multirow{3}{*}{} & \multicolumn{2}{c|}{
\specialcell{
В первой транзакции обновляется запись в таблице \texttt{judge}. В момент после обновления \\
вторая транзакция читает эту же запись из \texttt{judge}, однако в связи с отсутствием артефакта \\ <<Грязное чтение>> она видит исходную таблицу до обновлений первой транзакции.
}
}\\
\cline{2-3}
& \multicolumn{2}{c|}{Тут что-то ещё. }\\
\cline{2-3}
& \specialcell{Запуск транзакции 1 \\ \texttt{begin;}} & \specialcell{Запуск транзакции 2 \\ \texttt{begin;}}\\
\hline
$t_1$ &
\specialcell{
Изменение имени судьи с \texttt{id\_judge = 201}\\ \\
% \texttt{select id\_judge, name from judge}\\
% \texttt{where id\_judge = 201;}\\
\texttt{update judge set name = 'Софа'}\\
\texttt{where id\_judge = 201;}\\
% \texttt{select id\_judge, name from judge}\\
% \texttt{where id\_judge = 201;}\\
}
\includegraphics[width=1\linewidth]{img/transaction1_2.png}
&
\\
\hline
$t_2$ &
&
\specialcell{
Получение имени судьи с \texttt{id\_judge = 201} \\
и завершение транзакции\\ \\
\texttt{select id\_judge, name from judge}\\
\texttt{where id\_judge = 201;}\\
\texttt{commit;}\\
}
\includegraphics[width=1\linewidth]{img/transaction1_2.png}
\\
\hline
$t_3$ &
\specialcell{
Отмена внесённых изменений транзакцией 1 \\
\texttt{rollback;} \\
% \texttt{select id\_judge, name from judge}\\
% \texttt{where id\_judge = 201;}\\
}
\includegraphics[width=1\linewidth]{img/transaction1_3.png}
&
\\
\hline
\end{tabularx}
\end{table}
\end{document}