第十章:第11节 MySQL进阶篇——联合主键的自增问题

更新于:2017-08-28 15:16:03

当多列被设为联合主键时,auto_increment属性的列并不是自顾自一味地增长,而是需要配合其他主键的列。


例如:id和vid为联合主键,vid为auto_increment,


当id为1时,vid自动增长;
当id改变为2时,vid重新归1,从1开始增长。

 

但是按照该方法测试的时候,却无法设置联合主键vid自增长?


1.png


开始以为是数据库有数据的原因,后来才发现是因为用的存储引擎是InnoDB的原因。对于AUTO_INCREMENT类型的字段,InnoDB中只能为此字段单独建一个单列索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。


建立2张表tt1,tt2用来测试,2张表的结构都是如下三个字段:id,vid,other。id,vid为联合主键,存储引擎都是MyISAM。不同的是:tt1表是id自增长;tt2是vid自增长。


1.png


插入一些数据后会发现:


tt1表id只会自增,不会根据vid的值恢复到1;
而tt2表vid则会根据id的值的变化,而恢复到1。


1.png


即如果是联合主键第一列(id)自增时,则只会自己自增,不会根据第二列(vid)的值恢复到1。
只有在联合主键第二列(vid),才会出现我们预期的效果,根据第一列的值的变化会将值恢复到1。


结论:
1、要使用mysql联合主键自增,需使用MyISAM作为存储引擎。
2、使用联合主键自增的时候,自增键不能是主键最左的键。


本节学习代码》》》