|
|
Publicado em 28/05/2020 10:52:28
|
|
|
|

Tabelas temporárias são muito importantes no banco de dados SQLSERVER, e a seguir está uma introdução detalhada às características e ao uso de tabelas temporárias no banco de dados SQL, apenas para referência.
Tabelas temporárias são semelhantes às tabelas persistentes, mas tabelas temporárias são armazenadas no tempdb e são automaticamente excluídas quando não estão mais em uso. Existem dois tipos de tabelas temporárias: local e global. Eles são distinguidos pelo nome, visibilidade e disponibilidade.
A tabela temporária possui as seguintes características:
- Tabelas temporárias locais são tabelas que os usuários adicionam o prefixo "#" ao criar tabelas, que são independentes de acordo com as conexões do banco de dados. Apenas a conexão do banco de dados que criou a tabela temporária local tem acesso à tabela, e outras conexões não podem acessá-la.
- Em diferentes conexões de banco de dados, embora as tabelas temporárias locais criadas tenham o mesmo "nome", essas tabelas não têm relação entre si. No SQLSERVER, um mecanismo especial de nomenclatura garante a independência das tabelas temporárias locais nas conexões de banco de dados.
- Tabelas temporárias verdadeiras aproveitam o espaço temporário do banco de dados, que é mantido automaticamente pelo sistema de banco de dados, economizando assim espaço nas tabelas. E como o espaço de tabela temporário geralmente usa memória virtual, o número de E/S no disco rígido é muito reduzido, então a eficiência do sistema também é melhorada.
- A tabela temporária é esvaziada automaticamente após o término da transação ou sessão, então você não precisa lembrar de deletar os dados depois que eles acabam.
Tabelas temporárias locais
O nome da tabela temporária local é prefixado por um único símbolo numérico (#); Eles são visíveis apenas para a conexão do usuário atual (ou seja, a conexão que cria a tabela temporária local); Ele é excluído quando um usuário se desconecta de uma instância do SQL Server.
Por exemplo, criamos uma tabela temporária local em uma conexão de banco de dados com a seguinte instrução: #Temp
Conexão com o Banco de Dados 1:
Depois, inicie a conexão de banco de dados 2 ao mesmo tempo para realizar a consulta #temp
Conexão com o Banco de Dados 2:
Vamos ver qual é o resultado da conexão de banco de dados 2?
Conexão com o Banco de Dados 2:
Os resultados mostram que a conexão de banco de dados 2 não consegue encontrar a tabela #Temp. Isso significa que a #Temp temporária da tabela só é visível para a conexão de banco de dados 1 que a criou, mas não para a conexão de banco de dados 2.
Tabela temporária global
O nome de uma tabela temporária global é precedido por dois símbolos numéricos (##) e é visível para quaisquer conexões de banco de dados quando criadas, sendo removido quando todas as conexões de banco de dados que fazem referência à tabela são desconectadas do SQL Server.
Por exemplo, criamos uma tabela temporária global ##Temp em uma conexão de banco de dados com a seguinte instrução e então inserimos três linhas de dados
Conexão com o Banco de Dados 1:
Depois, consultamos o ##Temp的数据 na conexão de banco de dados 2
Conexão com o Banco de Dados 2:
O resultado da conexão de banco de dados 2 é o seguinte
Conexão com o Banco de Dados 2:
Como você pode ver, a conexão de banco de dados 2 pode acessar com sucesso a tabela temporária global ##Temp criada pela conexão de banco de dados 1, mas se fecharmos a conexão de dados 1 agora e executar o ##Temp查询语句会发生什么呢 da conexão de banco de dados 2? Os resultados são os seguintes:
Feche a conexão 1 do banco de dados, e então a conexão 2 executa novamente:
Descobrimos que, após fechar a conexão 1 do banco de dados, a conexão 2 não consegue encontrar a tabela temporária global ##Temp了. Isso porque, após o fechamento da conexão 1 do banco de dados, não há nenhuma instrução na conexão 2 usando a tabela temporária ##Temp, então o sqlserver pensa que não há conexão de banco de dados referenciando a tabela temporária global ##Temp了 neste momento, então ele fará ##Temp释放掉了.
Em seguida, tentamos fechar a tabela temporária global ##Temp持有事务中的排他锁 (X-lock) na conexão 2 do banco de dados e depois fechar a conexão 1.
Conexão com o Banco de Dados 1:
Conexão com o Banco de Dados 2:
Feche a conexão 1 do banco de dados, e então a conexão 2 executa:
O resultado mostra que, embora fedemos a conexão 1 do banco de dados, porque a conexão 2 tem mantido a tabela temporária global ##Temp的排他锁 (bloqueio X) na transação, a tabela temporária # #Temp并没有随着数据库连接1的关闭而被释放掉, desde que a transação iniciada na conexão 2 do banco de dados não seja revertida ou confirmada, a conexão 2 sempre manterá a tabela temporária ##Temp的排他锁. Neste momento, o Sqlserver vai achar que ainda existe uma conexão de banco de dados referenciando a tabela temporária global ##Temp, então ##Temp不会被释放掉. |
Anterior:Acesso de propriedade TypeScript (set,get)Próximo:SQL Server consulta os dias anteriores do horário atual do sistema
|