preciso bloquiar o acesso simultaneo de dados no banco sql. Quando o usuario 1 estiver lendo os dados da linha X, o usuario 2 nao pode acessar esses dados enquanto o usuario 1 nao liberar esses dados.
Dando uma pesquisada no google, encontrei algo sobre um bloqueio feito pelo InnoDB, mas não consegui utiliza-lo…
Não estou muito lembrado mas existe algo do tipo Commit que ajuda a prevenir que um dado tenha conflito ao ser manipulado por duas pessoas ao mesmo tempo.
Lucas, o acesso é a uma linha especifica ou ao próprio SGBD?
Digo, pois, se for bloquear o acesso a qualquer linha simultaneamente, podes usar o synchronized.
Edit: demorei tanto pra escrever que nao vi as duas ultimas respostas xD
Caro Giulliano, achu que me expressei mal mesmo! É exatamente isso que tenhu que fazer… bloquear o acesso quando um usuario esteja editando um dado… eu dei uma lida sobre esse lock, mas nao consegui usa-lo…
encontrei sites dizendo que eu deveria criar a tabela com o tipo InnoDB e utilizar um comando do tipo : Select * from tabela for update
mas esse comando nao funciona do mysql…
Caro nel,
seria bloquear o acesso a uma linha espefica que esta sendo lida… apenas se ela ja estiver sendo editada… cheguei a ver algo sobre bloqueio de registros… mas nao consegui absorve nada tbm… =/
Cara eu não sei muito bem mais da uma olhada em transaction… vc pode controlar isso …
quando alguem está lendo uma tabela ngm mais pode ter acesso a ela enquanto a transação não for encerrada.
vc vai configurando sua transaction como vc quer…
cara foi mal eu me confundiii vc não usa o transaction …
o transaction ele vai garantir que seja feio um commit se der tudo certo se não ele faz um roll back…
Você pode da um LOCK na tabela e depois que terminar seu select vc libera ela ,agora não é muito agradavél fazer isso não !!
Caso decida utilizar o “for update” tome muito cuidado, pois se você se descuidar você pode bloquear todo seu BD… como diz um amigo meu que é DBA -“O FOR UPDATE é persona non grata”
Tava pesquisando aqui, e parece que se eu usar o isolation level como read committed funcionaria direitin…
Mas nao deu pra testar, pq a versao do sql que tenhu aki e inferior à 4.0.5… =/
No caso, amigo, eu nao poderia dar um lock na tabela… a tabela nao pode ser travada… eu teria que travar apenas o indice… so nao sei se é possivel utilizar um lock pra travar um indice…
com o transaction não cara … pq ele so vai garantir a integridade de seus dados no banco … se por algum motivo der merda la na sua operação
ela vai fazer o roll back…