当前位置: 首页 > 面试题库 >

在SQL Server 2008中添加列是否会锁定表?

裴焱
2023-03-14
问题内容

我想在大约1200万条记录的表上运行以下命令。

ALTER TABLE t1
ADD c1 int NULL;
ALTER TABLE t2
ADD c2 bit NOT NULL
DEFAULT(0);

我已经在暂存阶段完成了该操作,并且时间安排似乎还不错,但是在生产之前,我想知道在创建新列时锁定表如何工作(特别是在指定默认值的情况下)。那么,有人知道吗?整个表是否被锁定,或者在默认值插入过程中行被一一锁定?还是发生了完全不同的事情?


问题答案:

是的,它将锁定表格。

整个表具有单个架构(列集以及关联的类型)。因此, 至少 需要一个模式锁来更新表的定义。

尝试考虑事情将如何相反地工作-如果每一行分别进行更新,那么任何并行查询将如何工作(特别是如果它们涉及新列)?

并且默认值仅在INSERTDDL和DDL语句期间有用-因此,如果为10,000,000行指定了新的默认值,则必须将该默认值应用于所有这些行。



 类似资料:
  • 众所周知,有两种锁定策略:乐观锁定和悲观锁定 悲观锁定是锁定记录供您独占使用,直到您使用完它。它比乐观锁定具有更好的完整性,但是需要您小心应用程序设计以避免死锁。 也知道,乐观并发控制与多版本并发控制(Oracle或MSSQL-Snapshot/MVCC-RC)不同:乐观与多版本并发控制-差异? 但是,如果在两个事务中都使用OCC(乐观并发控制),会在两个交易之间发生死锁吗? 我们可以说乐观锁通过

  • 您可以在下面的问题中看到:(liquibase-lock-reasons)当Liquibase操作中断时客户端Liquibase锁定,使Liquibase处于锁定状态。 我想知道是否有一种方法可以配置Liquibase,使其从列中的日期和时间自动检测这种情况。我想如果你已经拿着锁一个小时了--你应该把它叫做过期锁。

  • 我理解不能使用枚举器对列表进行修改 即使小于,它是否总是true?(据我所知,在这种情况下,数组不会被重新分配,因此枚举器必须有效); 为什么返回它设置为的元素,即使枚举器已经无效?(我的意思是,如果数组被重新分配...); 重新分配是否保存了项目的原始顺序?我的意思是如果某个项目的索引为n,添加和项目后是否会有相同的索引?(MSDN说在列表末尾添加一个对象)如果是这样,则在常规的循环中运行列表并

  • 问题内容: 只是为了确保我正确地理解了事情是如何工作的。 如果我愿意,它将仅阻止此实体()还是整个表? 如果重要的话,我在说。 问题答案: 它应该仅阻止实体。 PostgreSQLhibernate方言会在写入锁定的情况下添加:https : //github.com/hibernate/hibernate-orm/blob/master/hibernate- core/src/main/java

  • 我需要在一个表中添加多个列,但将这些列放在一个名为的列之后。 我试过这个: 我得到这个错误: 您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以了解在'后面第7行的')处使用的正确语法 如何在这样的查询中使用AFTER?

  • 问题内容: 我的Java程序想要读取一个文件,该文件可以被另一个写入该文件的程序锁定。我需要检查文件是否已锁定,如果已锁定,请等待它释放。我该如何实现? Java程序在Windows 2000服务器上运行。 问题答案: 在带有Sun JVM的Windows下,尽管JavaDoc保留了相当模糊的可靠性(取决于系统),但FileLocks应该可以正常工作。 但是,如果您只需要在Java程序中识别出 其