Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

tabela de bloqueio após BeginTransaction MySql Transaction em c#.net


BeginTransaction não significa que "sua transação foi iniciada e tudo está bloqueado". Ele apenas informa ao RDBMS sobre sua intenção de iniciar uma transação e que tudo o que você deve fazer a partir de agora deve e deve ser considerado atômico.

Isso significa que você poderia chamar BeingTransaction e eu poderia deletar todos os dados de todas as tabelas em seu banco de dados e o RDBMS alegremente me deixará fazer isso. Esperançosamente, ele não deve me deixar largar o banco de dados porque você tem uma conexão aberta com ele, no entanto, você nunca sabe nos dias de hoje. Pode haver alguns recursos não documentados que eu não conheço.

Atômica significa que qualquer ação ou conjunto de ações deve ser realizado como um. Se algum deles falhar, todos falharão. É um conceito de tudo ou nada.

Parece que você está inserindo três linhas em uma tabela. Se sua tabela estiver vazia ou tiver um número muito baixo de linhas, ela poderá bloquear a tabela inteira dependendo das regras LOCK ESCALATION do seu RDBMS. No entanto, se for uma tabela grande ou muito grande ou particionada, as regras de escalação LOCK podem não garantir um bloqueio de tabela. Portanto, ainda pode ser possível que várias transações insiram linhas em sua tabela ao mesmo tempo. Tudo depende de como o RDBMS lida com essa situação e como seu modelo de dados está estruturado.

Agora respondendo à sua questão:

DICA - Procure uma maneira de bloquear a tabela inteira antes de começar a inserir dados.

No entanto, isso geralmente não é bom, mas estou assumindo que você tem uma razão razoável para fazê-lo.

Espero que isto ajude.