SQL Server 锁机制与共享锁、独占锁
在 SQL Server 中进行 SELECT 查询的时候,是会对表进行加共享锁的,也就是 S 锁。一旦加了 S 锁,其他地方就只能对这张表进行查询(SELECT),不能进行增删改操作。
如果对表进行增删改,那么此时 SQL Server 就会对表进行独占锁。一旦加了独占锁,其他任何操作都不能对这张表进行增删改查,包括查询也不允许。
创建测试表
USE [School]
GO
/****** Object: Table [dbo].[Student] Script Date: 01/10/2019 11:48:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Student](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](250) NULL,
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GOCode language: PHP (php)
插入百万级测试数据
往这张表里面加入百万级的数据,name 使用随机数,随机字符串使用 NEWID() 函数来生成:
DECLARE @INDEX INT
SET @INDEX = 0
WHILE @INDEX < 1000000
BEGIN
INSERT INTO [School].[dbo].[Student]([name]) VALUES(NEWID())
SET @INDEX = @INDEX + 1
ENDCode language: PHP (php)
注意:这里的时间是原子性的,也就是同一时刻。比如当前一张表在查询,但查得很慢,一直还没查完,这个时候再去另一个页面查询,那就是同时。