SQL: пытаясь понять, как использовать безопасный доступ и изменять базу данных одновременно
Итак, я сейчас работаю в MySQL, но любые ответы на SQL, вероятно, подойдут, потому что я пытаюсь понять общие концепции.
Поэтому безопасность потоков, очевидно, важна в параллельных средах. Я программирую в основном на Java и всегда очень тщательно пишу код, который защищает его изменяемое состояние, чтобы избежать конфликтов потоков.
Однако в SQL я очень озадачен тем, как достичь того же уровня безопасности. Итак, я начну с того, чего не знаю, перейду к тому, о чем я запутался, и возьму это оттуда.
Первое, что я знаю, это транзакции. Отключите автоматическую фиксацию, используйте точки сохранения, откаты и т. Д. Транзакции, как я понимаю, являются атомарными с момента их фиксации.
Но я также видел ссылки на явные операторы блокировки и модели параллелизма (оптимистичные, пессимистичные). И я не совсем понимаю, где все это подходит. Я также не хочу просто использовать транзакции для всего и предполагать, что это будет безопасно. Я не пишу код, если не понимаю его полностью, я не хочу ничего оставлять на волю случая.
Более того, как насчет триггеров, процедур и т. Д. Как их использовать с транзакциями? Как мне обеспечить атомарность там?
Мне кажется, что я немного усложняю это, но я ищу исчерпывающее, четкое объяснение того, как обеспечить, чтобы несколько потоков и пользователей могли безопасно изменять базу данных. Не совсем и ELI5, так как я понимаю SQL лучше, чем это, но кое-что действительно подробно объясняет процесс.
Благодарю. Я не нашел подходящего совпадения для этого вопроса на этом сайте в своем поиске, но если это дубликат, я прошу прощения и просто прошу предоставить ссылку на соответствующий ответ, прежде чем этот вопрос будет заблокирован.