SELECT ... FROM ...
: esta é uma
leitura consistente, lendo uma cópia do banco de dados e
não defininfo travas.
SELECT ... FROM ... LOCK IN SHARE MODE
:
atribui travas de chave seguinte compratilhadas em todos
os regitros de índices que a leitura encontrar.
SELECT ... FROM ... FOR UPDATE
: atribui
travas de chave seguinte exclusivas em todos os registros
de ínidices que a leitura encontra.
INSERT INTO ... VALUES (...)
: atribui
uma trava exclusiva em registros inseridos; note que está
rava não é uma trava de chave seguinte e não previne
que outros usuários insiram nas lacunas antes do registro
inserido. Se um erro de chave duplicada ocorrerm, atribua
uma trava compartilhada no registro de índice duplicado.
INSERT INTO T SELECT ... FROM S WHERE
...
atribui uma trava exclusiva em cada linha
inserida em T
. Faz a busca em
S
como uma leitura consistente, mas
configura travas de chave seguinte compartilhada em
S
se o log do MySQL estiver ligado. O
InnoDB
tem que atribuir travas neste
último caso porque em recuperações roll-forward de um
backup, toda instrução SQL tem que ser executada
exatamente da mesma forma que foi feito originalmente.
CREATE TABLE ... SELECT ...
realiza o
SELECT
como uma leitura consistente ou
com travas compartilhadas, como no item anterior.
REPLACE
é feita como uma inserção se
não houver colisões em uma chave única. De outra forma,
uma trava de chave seguinte exclusiva é colocada na linha
que deve ser atualizada.
UPDATE ... SET ... WHERE ...
: atribui
trava de chave seguinte exclusiva em todos os registros
que a busca encontrar.
DELETE FROM ... WHERE ...
:atribui trava
de chave seguinte exclusiva em todos os registros que a
busca encontrar.
Se uma restrição FOREIGN KEY
é
definida na tabela. qualquer inserçao, atualização ou
deleção que exige verificação da condição de
restrição configura travas de registros compartilhados
nos registros que que ele olha na verificação da
restrição. Também no caso onde a restrição falha. o
InnoDB
define estes bloqueios.
LOCK TABLES ...
: atribui trava a
tabela. Na implementação a camada MySQL de código
atribui este bloqueio. A detecção automatica de
deadlocks do InnoDB
não pode ser feita
onde tais travas de tabelas estão envolvidas: veja a
seção seguinte. Também, uma vez que o MySQL sabe sobre
bloqueio de registros, é impossível que você obtenha um
bloqueio em uma tabela na qual outro usuário tenha
bloqueio de registro. Mas isto não coloca a integridade
da transação em perigo. See
Secção 7.5.15, “Restrições em Tabelas InnoDB”.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.