我正在从 Docker 映像(https://hub.docker.com/r/microsoft/mssql-server-linux/)运行 MS SQL Server for linux
我在我的日志文件中发现,我的日志表上有许多 PRIMARY KEY 违规,该表有ID uniqueidentifier DEFAULT NEWSEQUENTIALID()
列。
例外是:
Exception: System.Data.SqlClient.SqlException:
Violation of PRIMARY KEY constraint 'PK_Logs'.
Cannot insert duplicate key in object 'dbo.Logs'.
The duplicate key value is (20c0423e-f36b-1410-8020-800000000000).
如文档中所述
NEWSEQUENTIALID 是 Windows UuidCreateSequential 函数的包装器。
(来源:https ://docs.microsoft.com/en-us/sql/t-sql/functions/newsequentialid-transact-sql )
那么它在linux上是如何工作的呢?行为是否被破坏,因为生成的 GUID 应该是唯一的,而它们显然不是。
复制步骤
启动 mssql-server-linux docker 镜像
docker run mssql-server-linux
(详见https://hub.docker.com/r/microsoft/mssql-server-linux/)创建表
CREATE TABLE SequentialIdTest(ID uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID(), ColA int );
插入新行
INSERT INTO SequentialIdTest(ColA) VALUES (0);
重启docker镜像
docker restart {CONTAINER_NAME}
尝试再次插入新行
INSERT INTO SequentialIdTest(ColA) VALUES (0);