Sql server 2012 如何在SQL中使用表级唯一键和表级标识种子创建表

Sql server 2012 如何在SQL中使用表级唯一键和表级标识种子创建表,sql-server-2012,Sql Server 2012,我想要一个表,其中Column1和column2必须是唯一的,并且Column1上的自动标识: 例: Id列本身必须是自动递增的 数据将像 A A B B 要插入的数据如下所示: 1 A 2 A 1 B 2 B 我如何才能做到这一点?当您使用MySQL并且可以使用带有MyISAM引擎的表时,有一个内置功能: 对于MyISAM表,可以在辅助表上指定自动增量 多列索引中的列。在这种情况下,生成的值 对于自动增量列,计算如下 最大自动增量列+1,其中前缀=给定前缀。这是 当您想要将数据放入

我想要一个表,其中Column1和column2必须是唯一的,并且Column1上的自动标识:

例:

Id列本身必须是自动递增的

数据将像

A
A
B
B
要插入的数据如下所示:

 1 A
 2 A
 1 B
 2 B

我如何才能做到这一点?

当您使用MySQL并且可以使用带有MyISAM引擎的表时,有一个内置功能:

对于MyISAM表,可以在辅助表上指定自动增量 多列索引中的列。在这种情况下,生成的值 对于自动增量列,计算如下 最大自动增量列+1,其中前缀=给定前缀。这是 当您想要将数据放入有序的组中时非常有用

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;
返回:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+
在这种情况下,当自动增量列是 如果删除,将重用多列索引、自动增量值 任何组中自动增量值最大的行。这 甚至对于MyISAM表也会发生这种情况,因为它的值会自动递增 通常不重复使用


你不想这么做。只需使用串行/标识/自动增量列。不值得为每个Name值重新开始计数。@GordonLinoff我同意,如果你必须自己处理的话。当有内置功能时,为什么不呢?请您详细说明一下,我已经尝试过了,但每个插入列Id都会增加到下一个数字。。若我插入A和B,我希望标识列保持不变,因为第2列的值不同。如果插入相同的值,那么我希望它增加下一个numberApologies,我使用的是SQL server 2012,不熟悉MySQL。。。。我希望与上面的结果相同,但在SQL Server 2012中。SQL server 2012中提供了MySQL的一些内置功能:
+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+