Esta é uma pergunta humilde feita no espírito de aumentar meu conhecimento; seja gentil em sua resposta.
Como desenvolvedor de aplicativos de longa data, sei em algum nível o que é uma transação (eu os uso o tempo todo). Deixando de lado os níveis de isolamento da transação no momento, em um nível alto, uma transação permite que um bloco de trabalho seja concluído totalmente ou não existe, e permite uma certa quantidade de isolamento de outras atividades de modificação do banco de dados.
Eu também sei o que é (em vários bancos de dados) um bloqueio, ou pelo menos como se comporta (se eu bloquear uma tabela de alguma maneira explicitamente, nenhum outro processo ou thread poderá atualizar nada sobre essa tabela).
O que eu claramente não entendo é: em vários bancos de dados, quando bloqueio explicitamente uma linha ou tabela, estou empregando exatamente as mesmas construções que são usadas pelos recursos de transação do banco de dados sob as cobertas para fazer a transação funcionar corretamente?
Ou seja, me ocorre que, para que uma transação seja atômica e isolada, ela deve estar travando. Esse bloqueio iniciado por transação e oculto por transação é o mesmo tipo de bloqueio que vários bancos de dados me permitem acessar através de construções como comandos SELECT FOR UPDATE
explícitos ou LOCK
? Ou esses dois conceitos são completamente diferentes?
Mais uma vez, peço desculpas pela ingenuidade desta questão; Fico feliz em ser apontado para fontes mais fundamentais.