sql - 临时数据库如何工作?

标签 sql sql-server tempdb

我正在尝试理解tempDB,以下是我脑海中浮现的疑问。

  1. tempDB 中数据的生命周期是多长?假设一个查询正在执行一些 Order By 操作,并使用 tempDB 来执行该操作。此查询完成后,其他人也会执行使用 tempDB 的查询。第二个查询会在 tempDB 中找到第一个查询写入的记录还是将其删除?
  2. Sql 引擎在 tempDB 内是否创建了任何可见表?我如何知道由于该查询而创建了哪个临时表? Sql引擎是否遵循任何命名约定来命名这些临时表?

我是 tempDB 的新手,所以请原谅我问这样愚蠢的(如果有的话)问题:-)

如果有人能给我指出一个可以帮助我了解 tempDB 的好资源,那就太好了。

最佳答案

临时表存储在 tempdb 中,直到连接被删除(或者对于全局临时表,当最后一个使用它的连接被删除时)。当您使用完表后,您还可以(这是一个很好的做法)通过 drop table 语句手动删除该表。

不,如果临时表是本地临时表,其他人无法看到您的临时表(他们可以查看和使用全局临时表)多个人可以运行使用相同临时表名称的命令,但它们不会在本地临时表中重叠因此您可以有一个名为 #test 的表,其他 10,000 个用户也可以,但每个用户都有自己的结构和数据。

您通常不想在 tempdb 中查找临时表。可以检查是否存在,但这是我唯一一次直接引用 tempdb。只需使用您的临时表名称即可。下面检查是否存在的示例

  IF OBJECT_ID('TempDB.dbo.#DuplicateAssignments') IS NOT NULL 
  BEGIN 
  DROP TABLE #DuplicateAssignments 
  END  

您可以通过在名称前面加上 #(对于本地表,您 999.9% 的时间都会使用的表)和 ##(对于全局临时表)来命名临时表,然后是您想要的名称的其余部分。

关于sql - 临时数据库如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1595214/

相关文章:

c# - 参数化动态 sql 不返回任何结果

sql-server - 无法在亚马逊 linux 实例上安装 sql server - 需要 : systemd-units systemd and numactl-libs

c# - 使用 SQL #tempdb 将 databind() 绑定(bind)到 ListBox

c# - Entity Framework 和 SQL Server 临时表

php - 如何为给定场景创建 SQL 查询?

php - 限制php代码中数据库的数据

sql - 什么时候在关系数据库中使用枚举或小表?

MySQL 用另一列的平均值创建新列

c# - 如何检查Windows用户是否可以通过模拟访问(Windows集成安全性身份验证)SQL Server Analysis Services(SSAS)服务器

sql-server-2008-r2 - TempDB有2个数据文件,但SQL Server不知道?