Fórum Problema de Lock em tabela, key violation #255693
23/10/2004
0
Pessoal, estou com uma duvida. Estou desenvolvendo um aplicativo, e como experimento estou usando mysql.
Dentro do meu programa, tem um botão salvar que salva tudo aquilo que está na tela em 3 tabelas diferentes.
O problema é o seguinte, estou usando mysql 4 com tabelas myisam, no meu caso quando o cara clica em salvar antes do insert faço:
1. selecionando o maior codigo para gerar autonumeração
select max(codigo) from produtos
2. aplicando insert
insert.......codigo+1;
o problema é se haver concorrência, ou seja 100 pessoas fazendo a mesma coisa vou ter problema de key violation...Lendo o manual, verifiquei que com tabelas myisam posso dar um lock na tabela para evitar que outro usuario pegue o mesmo codigo na geração do mesmo. Então pensei em fazer isto
LOCK TABELA PRODUTOS
1. selecionando o maior codigo para gerar autonumeração
select max(codigo) from produtos
2. aplicando insert
insert.......codigo+1;
UNLOCK PRODUTOS....
isto no caso se repetirá 3 vezes na inserção pelo fato de inserção em 3 tabelas diferentes....
Não penso agora em mudar para tabelas inno....queria continuar com a tabela myisam.....vcs acham que eu perderia muito desempenho? qual melhor solução para este caso [b:6d8ef1c167][/b:6d8ef1c167]
Dentro do meu programa, tem um botão salvar que salva tudo aquilo que está na tela em 3 tabelas diferentes.
O problema é o seguinte, estou usando mysql 4 com tabelas myisam, no meu caso quando o cara clica em salvar antes do insert faço:
1. selecionando o maior codigo para gerar autonumeração
select max(codigo) from produtos
2. aplicando insert
insert.......codigo+1;
o problema é se haver concorrência, ou seja 100 pessoas fazendo a mesma coisa vou ter problema de key violation...Lendo o manual, verifiquei que com tabelas myisam posso dar um lock na tabela para evitar que outro usuario pegue o mesmo codigo na geração do mesmo. Então pensei em fazer isto
LOCK TABELA PRODUTOS
1. selecionando o maior codigo para gerar autonumeração
select max(codigo) from produtos
2. aplicando insert
insert.......codigo+1;
UNLOCK PRODUTOS....
isto no caso se repetirá 3 vezes na inserção pelo fato de inserção em 3 tabelas diferentes....
Não penso agora em mudar para tabelas inno....queria continuar com a tabela myisam.....vcs acham que eu perderia muito desempenho? qual melhor solução para este caso [b:6d8ef1c167][/b:6d8ef1c167]
Delphi_open
Curtir tópico
+ 0
Responder
Posts
24/10/2004
Vinicius2k
[b:7cbaca52c1][color=red:7cbaca52c1]Notificação de Infração às Regras de Conduta :[/color:7cbaca52c1][/b:7cbaca52c1]
Colega,
Neste tópico ocorreu infração às Regras de Conduta do Fórum.
[list:7cbaca52c1][*:7cbaca52c1]Tópico em duplicidade. Quando não obtiver respostas, responda no tópico original com um ´sobe´ para torná-lo visível na primeira página novamente, e não abra um novo tópico.
http://delphiforum.icft.com.br/forum/viewtopic.php?t=53545[/list:u:7cbaca52c1]
Peço que leia atentamente as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta[/url] para evitar que este fato se repita.
Se algum esclarecimento sobre o funcionamento do fórum ou sobre as Regras de Conduta for necessário, envie-me uma [url=http://delphiforum.icft.com.br/forum/privmsg.php?mode=post&u=2796]Mensagem Particular[/url].
Colega,
Neste tópico ocorreu infração às Regras de Conduta do Fórum.
[list:7cbaca52c1][*:7cbaca52c1]Tópico em duplicidade. Quando não obtiver respostas, responda no tópico original com um ´sobe´ para torná-lo visível na primeira página novamente, e não abra um novo tópico.
http://delphiforum.icft.com.br/forum/viewtopic.php?t=53545[/list:u:7cbaca52c1]
Peço que leia atentamente as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta[/url] para evitar que este fato se repita.
Se algum esclarecimento sobre o funcionamento do fórum ou sobre as Regras de Conduta for necessário, envie-me uma [url=http://delphiforum.icft.com.br/forum/privmsg.php?mode=post&u=2796]Mensagem Particular[/url].
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)