我正在将一个MSSQL数据库移植到MariaDB,我有一个由HeidiSQL生成的完整的SQL转储。 MSSQL数据库有几个索引声明为:
UNIQUE KEY ("JobCodeId","Rate")
我假设与以下内容相同:
UNIQUE INDEX (`JobCodeId`,`Rate`)
然而,在同一个SQL中,有很多插入具有相同的JobCodeId和Rate值,当我不明白时,我希望上述内容意味着不能有任何两个共享相同的记录JobCodeId和Rate,但在MSSQL表中有.... MariaDB不会允许它,我理解为什么,那有什么区别?
这是MSSQL表定义:
CREATE TABLE IF NOT EXISTS "Activity" (
"ActivityId" BIGINT(19,0) NOT NULL,
"JobCodeId" BIGINT(19,0) NOT NULL,
"ActivityDetailId" SMALLINT(5,0) NOT NULL,
"Rate" SMALLMONEY(10,4) NULL DEFAULT NULL,
"CreationDateTime" DATETIME(3) NOT NULL DEFAULT (getdate()),
"DisabledDateTime" DATETIME(3) NULL DEFAULT NULL,
UNIQUE KEY ("ActivityDetailId"),
PRIMARY KEY ("ActivityId"),
UNIQUE KEY ("JobCodeId","Rate")
);
以下是前几个插页:
INSERT INTO "Activity" ("ActivityId", "JobCodeId", "ActivityDetailId", "Rate", "CreationDateTime", "DisabledDateTime") VALUES
(19, 31, 8, 35, '2011-09-15 10:54:02.630', NULL),
(20, 31, 10, 42, '2011-09-15 10:54:35.907', NULL),
(21, 31, 11, 42, '2011-09-15 10:54:55.580', NULL);
MariaDB的修改后的SQL如下所示:
CREATE TABLE IF NOT EXISTS "Activity" (
"ActivityId" BIGINT(20) NOT NULL,
"JobCodeId" BIGINT(20) NOT NULL,
"ActivityDetailId" SMALLINT(5) NOT NULL,
"Rate" NUMERIC(15,4) NULL DEFAULT NULL,
"CreationDateTime" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"DisabledDateTime" DATETIME NULL DEFAULT NULL,
UNIQUE INDEX ("ActivityDetailId"),
PRIMARY KEY ("ActivityId"),
UNIQUE INDEX ("JobCodeId","Rate")
);
当我尝试操作插件时,MariaDB会抛出一个错误,这是我所期望的定义,但是为什么以及它如何在MSSQL中工作?