我想要一个表,其中Column1和column2以及Column1上的自动标识必须唯一:
例如:
Create table Foo (Id int, Name varchar(50));
Id列本身必须是自动递增的。
数据将像
一样传递A
A
B
B
要插入的数据如下:
1 A
2 A
1 B
2 B
我怎么能达到同样的目的?
答案 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值)也会发生 通常不会重复使用。