如何在带有表级身份种子的表级唯一键的SQL中创建表

时间:2018-08-24 11:56:35

标签: sql-server-2012

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

例如:

 Create table Foo (Id int, Name varchar(50));

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

数据将像

一样传递
A
A
B
B

要插入的数据如下:

 1 A
 2 A
 1 B
 2 B

我怎么能达到同样的目的?

1 个答案:

答案 0 :(得分:1)

当您使用MySQL并且可以与MyISAM引擎一起使用表时,具有内置功能:

  

对于MyISAM表,您可以在辅助数据库上指定AUTO_INCREMENT   多列索引中的列。在这种情况下,生成的值   AUTO_INCREMENT列的计算公式为   MAX(auto_increment_column)+ 1 WHERE前缀=给定的前缀。这是   当您想将数据放入有序组时很有用。

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 |
+--------+----+---------+
     

在这种情况下(当AUTO_INCREMENT列是   多列索引),如果删除,将重用AUTO_INCREMENT值   在任何组中具有最大AUTO_INCREMENT值的行。这个   即使对于MyISAM表(对于该表具有AUTO_INCREMENT值)也会发生   通常不会重复使用。